排序遇到一个异常
2021-11-24 10:42:01.185 ERROR 39804 --- [pool-9-thread-8] c.s.guns.modular.api.EnterpriseApi : --- java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:899)
at java.util.TimSort.mergeAt(TimSort.java:516)
at java.util.TimSort.mergeForceCollapse(TimSort.java:457)
at java.util.TimSort.sort(TimSort.java:254)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1462)
at java.util.Collections.sort(Collections.java:175)
抛错的代码是这样的
if (count1 >= count2) {
return -1;
} else {
return 1;
}
原因是因为JDK7中的Collections.Sort方法实现中,如果两个值是相等的,那么compare方法需要返回0,否则 可能 会在排序时抛错,而JDK6是没有这个限制的。
修改后的代码如下,问题解决。
if (count1 > count2) {
return -1;
} else if(count1 < count2){
return 1;
}else {
return 0;
}



