【发布时间】:2016-03-29 17:45:49
【问题描述】:
将 Collections.sort() 与自定义比较器一起使用时,我遇到了错误
java.lang.IllegalArgumentException: Comparison method violates its general contract!
在谷歌上搜索此错误后,我看到一些解释说如果comapare(a,b) 给我-1 并且compare(b,a) 也给我-1 那么我会看到这个错误。
我不明白为什么会发生两次比较?
【问题讨论】:
-
修复比较器即可。弄清楚排序例程进行的
compare调用的确切顺序对您没有帮助;只要输出经过排序,排序就可以随意进行任何比较,并且不同的 Java 版本和实现会做不同的事情。 -
我了解到我的比较器有问题。我只是想了解每对是否发生多次比较
-
不可能每对都发生;那将是 O(n^2) 比较和 Collections.sort 是 O(n log n)。
标签: java collections comparator