Java 排序异常 Comparison method violates its general contract

写了一段排序的代码,意思是o1对象的开始时间小于o2的开始时间时不交换o1,o2的顺序,否则交换顺序

        if (o1.getTimeStart().getTime() < o2.getTimeStart().getTime()) {
          return -1;
        }  else {
          return 1;
        }        

但是跑起来出现一个从来没有遇到过的异常信息

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.mergeForceCollapse(TimSort.java:457)
	at java.util.TimSort.sort(TimSort.java:254)
	at java.util.Arrays.sort(Arrays.java:1438)

查阅资料后说在JDK7之后更换了新的排序算法TimSort,没有对两值相等时的判定,直接当作1处理,因此报该异常。

后续补充详细说明

猜你喜欢

转载自www.cnblogs.com/guolaoshi/p/11490878.html