我对collection.sort()方法有些问题。
java.lang.IllegalArgumentException:比较方法违反了其一般合同!
at java.util.TimSort.mergeLo(TimSort.java:747)
at java.util.TimSort.mergeAt(TimSort.java:483)
at java.util.TimSort.mergeCollapse(TimSort.java:410)
at java.util.TimSort.sort(TimSort.java:214)
at java.util.TimSort.sort(TimSort.java:173)
在java.util.Arrays.sort(Arrays.java:659)
在java.util.Collections.sort(Collections.java:217)
这是我的比较器
public int compare(Key key1, Key key2)
{
if (key1.Score > key2.Score)
return -1;
else if(key1.Score < key2.Score)
return 1;
else
return 0;
}
我目前是jdk 1.7,我也试过1.6,但它没有用。我无法理解它是排序方法还是其他问题的问题。(我试图对包含1000多个项目的列表进行排序,但它没有任何NaN)。
答案 0 :(得分:1)
违反比较方法的一般合同意味着它不提供一致或正确的答案。似乎这种方法在多次比较相同的对象时不会返回相同的结果。
此代码可作为独立版本使用。你有其他一些线程修改集合项吗?