Comparison method violates its general contract!
时间: 2023-10-16 16:26:54 浏览: 170
"Comparison method violates its general contract!" 是Java中常见的一种异常,通常会在使用Collections.sort()或Arrays.sort()等排序方法时抛出。它的产生是由于比较器(Comparator)的实现不符合比较器的规范所致。
比较器的规范要求,如果有三个元素a、b、c,当a和b相等,b和c相等时,a和c也应该相等。如果比较器的实现不满足这个规范,就会产生"Comparison method violates its general contract!"异常。这个异常的出现通常意味着比较器的实现出现了一些逻辑错误,需要重新检查。
下面是一个常见的比较器实现错误:
```java
Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer a, Integer b) {
return a % 10 - b % 10;
}
};
```
这个比较器的实现不符合比较器的规范,例如当输入为10、20、30时,会得到一个错误的结果。正确的实现方式是:
```java
Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer a, Integer b) {
if (a % 10 == b % 10) {
return a - b;
}
return a % 10 - b % 10;
}
};
```
这样实现的比较器满足比较器的规范,不会产生"Comparison method violates its general contract!"异常。
阅读全文