比较器和类似接口中使用的内部排序技术是什么?为什么?

时间:2017-09-11 10:23:05

标签: java sorting comparator comparable

关于Java中的 Comparable和Comparator接口,我想问一下,内部使用的排序技术是什么,以及使用排序技术的任何原因与其他排序技术比较?

1 个答案:

答案 0 :(得分:0)

ComparableComparator都是接口。他们所做的就是定义一种询问一个对象是否大于,等于或小于另一个的方法。

接口不强制实现这意味着什么 - 这取决于实现接口的类。所以一个Comparator<Employee>可能会说亚当比“比比尔”更大,因为A在字母B中出现在B之前。另一个Comparator<Employee>可能会说比尔“大于”亚当,因为比尔已经在公司待了更长时间。

任何排序算法都需要能够比较两个项目,以便知道哪个项目应该在输出中排在第一位。如果您编写了冒泡排序,则可以使用Comparator来比较项目。

Java在一些地方内置了各种类型,包括Arrays.sort()Collections.sort()Stream::sorted

ArraysCollections的JavaDoc声明:

  

该实现改编自Tim Peters的Python排序(TimSort)。它使用了Peter McIlroy的“乐观排序和信息理论复杂性”中的技术,参见“第四届年度ACM-SIAM离散算法研讨会论文集”,第467-474页,1993年1月。

Stream的JavaDoc没有指定排序方法 - 我怀疑这是因为实现可以自由变化。