这里是堆栈跟踪我得到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