以下几行:
ArrayList<ShowdownSingleValueVO> sortedValues = new ArrayList<>();
(...fill the array...)
Collections.sort(sortedValues);
返回以下异常:比较方法违反了其一般合同!
我知道这种异常通常在比较方法未正确实现时生成,但在我的情况下,它的实现非常明显:
public static class ShowdownSingleValueVO implements Comparable<ShowdownSingleValueVO>{
int hashValue;
byte showdownValue;
public ShowdownSingleValueVO(int hashValue, byte showdownValue) {
this.hashValue = hashValue;
this.showdownValue = showdownValue;
}
@Override
public int compareTo(ShowdownSingleValueVO o) {
return this.hashValue - o.hashValue;
}
}
如您所见,目标是使用hashValue属性对值进行排序。
我非常感谢您对我做错的任何想法/暗示!
谢谢, 托马斯
答案 0 :(得分:5)
您很可能遇到int
溢出。由于哈希码的幅度可以任意大,因此可以想象减法会在某些值对上溢,在减去两个负数时产生正值。
用implementation from Integer
替换减法以解决此问题:
public int compareTo(ShowdownSingleValueVO o) {
return Integer.compare(this.hashValue, o.hashValue);
}