java Comparison method violates its general contract!
时间: 2024-02-01 22:10:54 浏览: 137
java中排序报:Comparison method violates its general contract异常的解决
当在Java中使用`Collections.sort()`方法对列表进行排序时,有时会出现异常`Comparison method violates its general contract`。这个异常表示比较方法违反了其一般约定。
异常的原因是在比较方法中使用了错误的方式进行比较。在引用中的例子中,比较方法使用了三元运算符进行比较,这是错误的方式。
为了解决这个问题,可以采取以下两种方法之一:
1. 修改比较方法,使用`compareTo()`方法进行比较。`compareTo()`方法是Java中用于比较两个对象的方法,它返回一个整数值,表示两个对象的大小关系。正确的比较方法应该是`return o1.compareTo(o2)`。
2. 在JVM启动参数中增加`-Djava.util.Arrays.useLegacyMergeSort=true`。这个参数会使用旧版本的排序算法,可以避免出现该异常。
下面是修改后的比较方法的示例代码:
```java
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
```
阅读全文