Collections.sort(...)如何工作?

时间:2016-04-19 18:10:58

标签: java list sorting collections

要清楚,我试图找出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。

它到底有什么比较?任何模式?

2 个答案:

答案 0 :(得分:5)

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

  

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

换句话说,Java实现可以自由使用他们喜欢的任何排序算法,前提是它以相同的相对顺序保持相同的元素。这意味着如果不了解您的特定Java实现,就无法知道要进行哪些比较。 (如果我没记错的话,Oracle版本的Java实际上将Collections.sort的实现从Java 7切换到Java 8,尽管我可能会弄错。)

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

答案 1 :(得分:-1)

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