Java集合排序假设

时间:2018-01-21 19:34:31

标签: java sorting

我目前是计算机科学专业,正在修读高级java编程课程。我今天的问题是,如果你有两个相同的列表,让我们称之为list1和list2,你调用Collections.sort(list1)和Collections.sort(list2),这两个列表调用后可能会有所不同吗?我的教科书说这是可能的,而我的教授说它不是。有人可以帮我澄清一下吗?

1 个答案:

答案 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所示:

  

强烈建议(尽管不要求)自然   排序与平等一致。

否则,可能会对不同的元素进行不同的排序。