繁体   English   中英

Collections.sort(…)如何工作?

[英]How does Collections.sort(…) work?

为了清楚起见,我试图找出Collections.sort(list,new MyComp())方法如何按顺序调用compare方法。

我有一个带有雇员及其个人号码(k)的LinkedList:这些号码是:{1,2,3,4,5,6} MyComparator中的compare(Object o1,Object o2)方法返回一些数字(即与该问题无关)。 sort()如何调用方法比较? 它使用参数1,2然后,2,3然后3,4然后4,5然后5,6来调用它吗? 我调试了它,但是有一些奇怪的序列,它跳回去并且还比较了1,3。

它到底有什么比较? 有图案吗?

进行的具体比较取决于在内部使用Collections.sort方法对元素进行排序的算法。 根据Javadoc for Collections.sort

此类中包含的多态算法文档通常包括对实现的简要说明。 此类描述应被视为实现说明,而不是说明书的一部分。 只要遵守规范本身,实现者就可以随意替换其他算法。 (例如,sort使用的算法不必是mergesort,但必​​须是稳定的。)

换句话说,Java实现可以自由使用他们想要的任何排序算法,只要它以相同的相对顺序保持相等的元素即可。 这意味着,如果没有更多关于您特定Java实现的知识,就无法知道将进行哪些比较。 (如果我没记错的话,Oracle的Java版本实际上将其Collections.sort实现从Java 7切换到了Java 8,尽管我可能会误会。)

也就是说,这不是一件坏事。 编写比较器背后的想法是告诉排序方法“做任何需要做的事情来对事物进行排序,如果需要进行比较,这就是做到这一点的方法。” 这是一个很好的抽象-您说了如何对事物进行排名,然后魔术排序的黑匣子就开始使用它来使事物井然有序。

Java 7中Collections.sort的排序算法是插入排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM