Java 集合排序假设

标签 java sorting

我目前主修计算机科学,正在学习高级 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/

相关文章:

java - 将信号从 .NET 应用程序传递到 Java 应用程序

java - 在类 block 内声明和实例化

java - HTTP 状态 404 - Servlet 调度程序不可用

c++ - 双向链表上的快速排序

c++ - 通过将最小的数字放在第一位来将两个数组组合成一个

java - Maven JAX-WS WSGEN "Class not found error"

java - 如何强制 primefaces 数据表中的文本填充整列

bash - 在不排序的情况下删除变量上的重复项

c# - 使用 IComparer 进行分组和排序

java - 按对象方法的值对数组列表进行排序