comparison method violates its general contract
时间: 2023-04-29 10:00:50 浏览: 145
这是一个 Java 中的错误信息,意思是某个类的比较方法违反了它的通用契约。
通常来说,Java 类库中的很多类都实现了 Comparable 接口,该接口定义了一个 `compareTo()` 方法,用于比较类的对象之间的大小关系。这个错误信息就是在说,某个类的 `compareTo()` 方法实现与 Comparable 接口的规范不符合。
要解决这个问题,需要检查该类的 `compareTo()` 方法实现,确保它满足 Comparable 接口的规范,包括反射性、对称性和传递性等。也可以考虑使用 IDE 中提供的代码检查工具来找出问题所在。
相关问题
Comparison method violates its general contract
"Comparison method violates its general contract"是Java中排序时可能出现的异常。这个异常通常是由于排序算法中的比较器没有遵守比较器的一般契约而引起的。比较器的一般契约是指,如果a > b,那么b < a,如果a = b,那么b = a,如果a < b,那么b > a。如果比较器不遵守这个契约,就会导致排序时出现异常。解决这个问题的方法是检查比较器的实现是否遵守了这个契约。如果没有,需要修改比较器的实现,使其遵守这个契约。
Comparison method violates its general contract!
"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!"异常。
阅读全文