需要明确的是,我试图找出 Collections.sort(list, new MyComp()) 方法如何按顺序调用比较方法。
我有一个包含员工及其个人号码 (k) 的 LinkedList:
数字是:
{1,2,3,4,5,6}
MyComparator 中的compare(Object o1, Object o2) 方法返回一些数字(与此问题无关)。
sort()如何调用方法进行比较?
它是否使用参数 1,2 then、2,3 then 3,4 then 4,5 then 5,6 来调用它?我调试了它,但有一些奇怪的序列,它跳回来并比较 1,3。
它具体比较什么?有什么图案吗?
进行的具体比较取决于内部的算法Collections.sort
方法用于对元素进行排序。根据 Javadoc 的说法Collections.sort
:
此类中包含的多态算法的文档通常包括实现的简要描述。此类描述应被视为实现注释,而不是规范的一部分。只要遵守规范本身,实现者就可以随意替换其他算法。 (例如,排序使用的算法不一定是归并排序,但它必须是稳定的。)
换句话说,Java 实现可以自由地使用它们想要的任何排序算法,只要它以相同的相对顺序保持相等的元素即可。这意味着如果不更多地了解具体的 Java 实现,就无法知道将进行哪些比较。 (如果我没记错的话,Java 的 Oracle 版本实际上切换了它的实现Collections.sort
从 Java 7 到 Java 8,尽管我可能是错的。)
也就是说,这并不是一件坏事。编写比较器背后的想法是告诉排序方法“做任何你需要做的事情来对事物进行排序,如果你需要进行比较,这里就是这样做的方法。”这是一个很好的抽象 - 你说出如何对事物进行排序,然后排序的神奇黑匣子就会使用它来使事物按顺序排列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)