這裏是堆棧跟蹤我得到Java7 - 比較法違反其總承包(TimSort.java)
Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:777)
at java.util.TimSort.mergeAt(TimSort.java:514)
at java.util.TimSort.mergeCollapse(TimSort.java:441)
at java.util.TimSort.sort(TimSort.java:245)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1454)
at java.util.Collections.sort(Collections.java:175)
at xxx.sortDisplayFields(OfferFieldLayout.java:521)
這裏是比較方法:
public int compare(Field pObject1, Field pObject2)
{
int compare = 0;
//...
if (compare == 0)
{
if (pObject1.hashCode() <= pObject2.hashCode())
{
compare = -1;
}
else
{
compare = 1;
}
}
return compare;
}
我認爲這是由於傳遞性不受尊重: 傳遞性:如果A> B和B> C,那麼對於任何A,B和C:A> C。 我想要拿出一個反例,但我在這裏失敗了,任何幫助不勝感激!
[Java錯誤:比較方法違反其常規合同]的可能重複(https://stackoverflow.com/questions/11441666/java-錯誤比較方法違反它的一般合同) – Kon
你能告訴我們完整的比較方法嗎? –
這是特定於Java 7的嗎? – shmosel