当前位置: 首页 > 面试题库 >

Collections.sort(…)如何工作?

潘翊歌
2023-03-14
问题内容

为了清楚起见,我试图找出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的规定Collections.sort

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

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

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



 类似资料:
  • 我被要求创建一个方法,该方法应该分别返回一个迭代器或数组,其中的元素按“add”计数(HashMap中的值)升序排序。 所以我似乎必须重写或创建sort方法。有人能帮我指出正确的方向吗?

  • 问题内容: 我试图根据类A的int排序类B中名为BinOrder的类型A的列表。 但是我收到此错误行Collections.sort(BinOrder); A类: B级: 问题答案: 为了能够使用单参数版本上的,应该实现的接口:

  • 我有字符串的比较器,它被转换成日期。当我将这个比较器传递给集合时。sort()方法我得到了java。lang.IllegalArgumentException:比较法违反其总合同!。 我读过一些关于这个例外的文章,但我真的不明白为什么会出现这个例外。知道吗?

  • 我遇到了Java内置的collections.sort()方法的问题。我试图对一个名为TreeNode的自定义对象类型的ArrayList进行排序。我在过去成功地使用了这种方法,并希望外界看看我是否遗漏了任何明显的东西。 我希望通过一个整数字段对这些TreeNode对象进行排序,该字段都被称为myWeight。myWeight是特定字符在文本文件中出现的次数的整数表示。在我的项目中,我使用了一个名

  • 本文向大家介绍java中Collections.sort排序详解,包括了java中Collections.sort排序详解的使用技巧和注意事项,需要的朋友参考一下 Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能;如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的。 com

  • 本文向大家介绍详解Java中Collections.sort排序,包括了详解Java中Collections.sort排序的使用技巧和注意事项,需要的朋友参考一下 Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能;如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的。 com