zoukankan      html  css  js  c++  java
  • 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处理,因此报该异常。

    后续补充详细说明

  • 相关阅读:
    软件工程个人作业01
    动手动脑
    大道至简感想终结篇
    课后作业
    反思
    课后作业
    不忘初心,方得始终
    课后作业
    沟通,让一切变得简单

  • 原文地址:https://www.cnblogs.com/guolaoshi/p/11490878.html
Copyright © 2011-2022 走看看