首页 > 编程语言 > 详细

Java 排序异常 Comparison method violates its general contract

时间:2019-09-09 13:42:21      阅读:119      评论:0      收藏:0      [点我收藏+]

写了一段排序的代码,意思是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处理,因此报该异常。

后续补充详细说明

Java 排序异常 Comparison method violates its general contract

原文:https://www.cnblogs.com/guolaoshi/p/11490878.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!