一切似乎都運行良好(幾天),但我碰到一個問題只有一次,並有一個非常困難的時間來重現問題。 「Java 7 - 「比較方法違反其總合約!」
」比較方法違反其總合同!「被拋出,完全讓我措手不及。我有以下幾點:
public class CustomComparator implements Comparator<Chromosome> {
public int compare(Chromosome c1, Chromosome c2){
return c1.compareTo(c2);
}
}
我的染色體類:
public class Chromosome implements Comparable<Chromosome>{
private double rank;
//bunch of methods...
@Override public int compareTo(Chromosome c){
final int BEFORE = -1;
final int EQUAL = 0;
final int AFTER = 1;
if (this.getRank() == c.getRank()) //getRank() simply returns a double value 'rank'
return EQUAL;
else if (this.getRank() < c.getRank())
return BEFORE;
else //i.e. (this.getRank() > c.getRank())
return AFTER;
}
我有一個ArrayList和我同時使用Collections.sort(MYLIST)和Collections.sort(MYLIST,Collections.reverseOrder()) 。到目前爲止他們仍然工作得很好。我只在100次運行中遇到過這種錯誤。這個實現有什麼問題嗎?
是否有任何雙值的NaN? – 2014-12-06 13:29:00
可能是'0.0/0.0'或類似的結果。 – 2014-12-06 13:30:31
你的compareTo方法可以簡單地說,'return Double.compare(this.rank,c.rank);'。自定義比較器自從它在染色體實例上調用'compareTo'時就沒用了。 – 2014-12-06 13:31:06