写了一段排序的代码,意思是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处理,因此报该异常。
后续补充详细说明