下面是代碼導致異常所指示的塊,比較方法拋出一般合同異常
代碼:
Collections.sort(arrayList, new Comparator()
{
public int compare(Object o1, Object o2)
{
TypeAdapterSort tas1 = (TypeAdapterSort) o1;
TypeAdapterSort tas2 = (TypeAdapterSort) o2;
if (tas1.order < tas2.order)
return -1;
else
return 1;
}
});
例外:
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)
當我運行與獨立程序相同的代碼,問題就不會發生。 這裏的比較器有什麼問題? 有沒有辦法在獨立代碼中重現問題?
此問題僅在Java 1.7上發生,因爲Arrays.sort & Collections.sort中的實現發生了更改。如何改變上面的代碼來避免這個問題?另外,如何在獨立代碼中重現此問題?
可能重複。 http://stackoverflow.com/questions/6626437/why-does-my-compare-method-throw-exception-comparison-method-violates-its-gen – 2013-04-18 06:21:19
[比較方法違反其通用合同例外java 7]的可能重複(http://stackoverflow.com/questions/15897892/compare-method-violates-its-general-contract-exception-java-7) – 2013-04-19 07:50:36
停止問多次相同的問題。 – 2013-04-19 07:50:45