1
什麼可以此異常的原因:java.lang.IllegalArgumentException比較方法違反了它的一般合約!在數據庫#排序
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:747)
at java.util.TimSort.mergeAt(TimSort.java:483)
at java.util.TimSort.mergeForceCollapse(TimSort.java:426)
at java.util.TimSort.sort(TimSort.java:223)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
...
我用比較像這樣:
private Comparator<SomeObject> comporator = new Comparator<SomeObject>() {
public int compare(SomeObject o1, SomeObject o2) {
return Double.compare(o2.getValue(), o1.getValue());
}
};
public double getValue() {
double value = 0;
for (Parameter parameter : parametrs()) {
value = value + (parameter.getWeight() * parameter.getSomeValue(this));
}
return value;//20.0, 23.0 ...
}
其中parameter.getSomeValue:
public int getSomeValue(SomeObject process) {
return (int) ((System.currentTimeMillis() - process.getPutTime())/1000);
}
在:
public void sort() {
synchronized (list) {
Collections.sort(list, comporator);
}
}
其中:
List<SomeObject> list = new ArrayList<SomeObject>();
我不能再現此異常,但它有時會出現。 此外,你可以給代碼示例100%的情況下出現此問題?