我目前是计算机科学专业,正在修读高级java编程课程。我今天的问题是,如果你有两个相同的列表,让我们称之为list1和list2,你调用Collections.sort(list1)和Collections.sort(list2),这两个列表调用后可能会有所不同吗?我的教科书说这是可能的,而我的教授说它不是。有人可以帮我澄清一下吗?
答案 0 :(得分:4)
如果我们考虑明显的情况,例如排序List<Integer>
,那么不可能。如果您要对两个相同的列表进行排序,那么它们当然应该正确排序。
但是,由于Collections.sort()
要求排序的对象为Comparable
,因此您始终可以很好地实现Comparable
。例如,您可以让compareTo()
返回一个随机值(或一天中的时间,或与实际排序的对象无关的任何内容),您将不知道它们将如何排序。
Collections.sort()
可以注意到compareTo()
的实施方式是否错误,并会抛出Comparison method violates its general contract!
的异常。然而,并非100%保证会注意到这一点,因此技术上可能有两个相同的集合以不同的方式排序。
由于Object.equals()
定义了相等,但比较由Comparable.compareTo()
或Comparator.compare()
定义,如javadoc所示:
强烈建议(尽管不要求)自然 排序与平等一致。
否则,可能会对不同的元素进行不同的排序。