关于Java中的 Comparable和Comparator接口,我想问一下,内部使用的排序技术是什么,以及使用排序技术的任何原因与其他排序技术比较?
答案 0 :(得分:0)
Comparable
和Comparator
都是接口。他们所做的就是定义一种询问一个对象是否大于,等于或小于另一个的方法。
接口不强制实现这意味着什么 - 这取决于实现接口的类。所以一个Comparator<Employee>
可能会说亚当比“比比尔”更大,因为A在字母B中出现在B之前。另一个Comparator<Employee>
可能会说比尔“大于”亚当,因为比尔已经在公司待了更长时间。
任何排序算法都需要能够比较两个项目,以便知道哪个项目应该在输出中排在第一位。如果您编写了冒泡排序,则可以使用Comparator
来比较项目。
Java在一些地方内置了各种类型,包括Arrays.sort()
,Collections.sort()
,Stream::sorted
。
Arrays
和Collections
的JavaDoc声明:
该实现改编自Tim Peters的Python排序(TimSort)。它使用了Peter McIlroy的“乐观排序和信息理论复杂性”中的技术,参见“第四届年度ACM-SIAM离散算法研讨会论文集”,第467-474页,1993年1月。
Stream
的JavaDoc没有指定排序方法 - 我怀疑这是因为实现可以自由变化。