coc*_*ner 4 java sorting collections list
为了清楚起见,我试图找出Collections.sort(list,new MyComp())方法如何调用哪个序列的compare方法.
我有一个带有员工的LinkedList和他们的个人号码(k):数字是:{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的说法Collections.sort:
此类中包含的多态算法的文档通常包括实现的简要描述.这些描述应被视为实施说明,而不是规范的一部分.只要遵守规范本身,实现者就可以随意替换其他算法.(例如,sort使用的算法不必是mergesort,但它必须是稳定的.)
换句话说,Java实现可以自由使用他们喜欢的任何排序算法,前提是它以相同的相对顺序保持相同的元素.这意味着如果不了解您的特定Java实现,就无法知道要进行哪些比较.(如果我没记错的话,Oracle版本的Java实际上将其Collections.sortJava 7的实现转换为Java 8,尽管我可能会弄错.)
那就是说,这不是一件坏事.编写比较器背后的想法是告诉排序方法"做任何你需要做的事情来排序,如果你需要进行比较,这就是做这件事的方法." 这是一个很好的抽象 - 你说如何对事物进行排名,然后魔术黑盒子排序然后使用它来使事情井然有序.