我目前主修计算机科学,正在学习高级 Java 编程类(class)。我今天的问题是,如果你有两个相同的列表,我们称它们为 list1 和 list2,然后你调用 Collections.sort(list1) 和 Collections.sort(list2),这两个列表在调用之后是否可能不同?我的教科书说这是可能的,而我的教授说不可能。有人可以为我澄清一下吗?
最佳答案
如果我们考虑排序等明显的情况 List<Integer>
,那么不,这是不可能的。如果您要对两个相同的列表进行排序,当然应该对它们进行正确排序。
但是自Collections.sort()
要求被排序的对象是 Comparable
, 你总是可以实现 Comparable
不好。例如你可以有 compareTo()
返回一个随机值(或一天中的时间,或与实际排序的对象无关的任何内容),您将不知道它们将如何排序。
Collections.sort()
可以注意到如果 compareTo()
实现错误,将抛出异常说 Comparison method violates its general contract!
.但是,不能 100% 保证注意到这一点,因此技术上有可能以不同的方式对 2 个相同的集合进行排序。
因为相等由 Object.equals()
定义, 但比较由 Comparable.compareTo()
定义或 Comparator.compare()
, 比如 javadoc说:
It is strongly recommended (though not required) that natural orderings be consistent with equals.
否则有可能相同的元素排序不同。
关于Java 集合排序假设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48370876/