Java集合排序
我目前主修计算机科学,正在学习高级java编程课程。我今天的问题是,如果您有两个相同的列表,让我们称它们为list1和list2,然后您调用Collections.sort(list1)和Collections.sort(list2),调用此列表后这两个列表是否可能不同?我的教科书说这是可能的,而我的教授说不是。有人能帮我澄清一下吗如果我们考虑诸如排序>代码>列表< /代码>这样的明显情况,那么不可能。如果要对两个相同的列表进行排序,那么它们当然应该正确排序 但是,由于Java集合排序,java,sorting,Java,Sorting,我目前主修计算机科学,正在学习高级java编程课程。我今天的问题是,如果您有两个相同的列表,让我们称它们为list1和list2,然后您调用Collections.sort(list1)和Collections.sort(list2),调用此列表后这两个列表是否可能不同?我的教科书说这是可能的,而我的教授说不是。有人能帮我澄清一下吗代码>列表< /代码>这样的明显情况,那么不可能。如果要对两个相同的列表进行排序,那么它们当然应该正确排序 但是,由于Collections.sort()要求被排序的
Collections.sort()
要求被排序的对象是可比较的
,因此总是可以实现可比较的
。例如,您可以让compareTo()
返回一个随机值(或一天中的时间,或与实际被排序的对象无关的任何内容),而您不知道它们将如何排序
Collections.sort()
会注意到compareTo()
的实现是否错误,并会抛出异常,说明比较方法违反了其一般约定代码>。但是,不能保证100%注意到这一点,因此从技术上讲,有可能以不同的方式对两个相同的集合进行排序
因为相等是由Object.equals()
定义的,而比较是由Comparable.compareTo()
或Comparator.compare()
定义的,如所述:
强烈建议(尽管不是必需的)自然
排列顺序必须与等号一致
否则,相等的元素可能排序不同。取决于“不同”的含义。我希望不是这样。书中提到的细微差别是否不在问题中?同样,拥有相同的不同对象(两个相同的对象,每个对象具有不同的内存分配)可能会导致内存p.o.v的“不同”顺序,但不会导致对象内容比较的“不同”顺序,这同样取决于compareTo()实现例如,ifcompareTo()
依赖于默认的toString()
方法,该方法不被列表元素的类覆盖,您可能最终通过默认的hashCode()
方法来比较对象的内部地址。实现Comparable
的一个例子是涉及任何类型的随机值。这是我能看到的对两个相同列表进行排序并得到不同结果的唯一物理方法。