可比/比较器使用的内部排序工作

时间:2019-01-14 12:22:59

标签: java sorting compare comparator comparable

我正在浏览Java中用于排序的Comparable和Comparator接口。我了解了它们如何工作的基本知识。

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

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

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

1 个答案:

答案 0 :(得分:3)

这取决于您调用哪种排序方法,但是通常:这是Java的实现细节,有意不向用户公开。

在Oracle Java 8上,我可以看到原语排序使用了Dual-Pivot Quicksort,Mergesort和InsertionSort的某种邪恶组合,具体取决于数组(在算法中的任何点)是否是<386个元素,<47个元素和/或是否确定(启发式)“几乎已排序”。

另一方面,对象的分类使用Tim Peters的Python排序算法,当算法中任意点的数组为<32时,使用mini-Timsort;如果标志java.util.Arrays.useLegacyMergeSort为true,则使用Mergesort。 / p>

[edit] Arrays.sort等于Collections.sort(如果包含对象数组)。