【问题标题】:Internal working of sorting used by Comparable/Comparator [duplicate]Comparable / Comparator使用的排序的内部工作[重复]
【发布时间】:2019-06-08 10:34:59
【问题描述】:

我正在研究用于在 Java 中进行排序的 Comparable 和 Comparator 接口。我了解它们如何工作的基础知识。

我感兴趣的是它们的内部工作,即排序实际上是如何在内部进行的。

我假设 compare/compareTo 方法返回的正值、负值或零值将作为参数传递给另一个 Sort 方法。

我需要知道内部的排序方法是什么或正在使用哪种排序,任何文章或代码都会有所帮助。

【问题讨论】:

  • 哪种排序?你读过Javadoc吗?什么不清楚?
  • 排序什么? ComparatorComparable 只是 interfaces,因此它们的实现可以而且很可能会在每个实现所述接口的类之间有所不同,只需查看 JDK 中的 String#compareToInteger#compareTo
  • 您是否正在寻找一种排序可能的算法?

标签: java sorting compare comparator comparable


【解决方案1】:

这取决于您调用哪种排序方法,但一般来说:它是 Java 的一个实现细节,有意不向用户公开。

通过 Oracle Java 8,我可以看到基元的排序使用了 Dual-Pivot Quicksort、Mergesort 和 InsertionSort 的某种邪恶组合,具体取决于数组(在算法中的任何点)是否

另一方面,对象的排序使用 Tim Peters 的 Python 排序算法,当算法中任意点的数组小于 32 时,该算法使用 mini-Timsort,如果标志 java.util.Arrays.useLegacyMergeSort 为真,则使用 Mergesort。

[编辑] Arrays.sort 等于 Collections.sort 如果对象数组。

【讨论】:

猜你喜欢
  • 2017-08-31
  • 1970-01-01
  • 2011-01-17
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2016-04-05
  • 1970-01-01
相关资源
最近更新 更多