Comparison method violates its general contract!


  废话少说,直接上报错信息(如下图)

  最近公司app上有个列表时而报错,时而不报,复现问题不是很容易,翻看了下日志才知道是排序的地方有问题,这还是我第一次遇到,具体定位:Collections.sort(xxx),

于是再看对应的compareTo方法,如下

 

1     @Override
2     public int compareTo(xxx o) {
3         return this.getPublishTime().getTime() < o.getPublishTime().getTime() ? 1 : -1;
4     }

 

咋一看,这个倒序排列就是没有对==的情况进行处理,而是将==算作-1处理了,Google了一下,发现是由于jdk7排序换了新的算法Timsort,这样就会对排序的大小进行严格校验,而jdk6是没有对此进行校验的

所以解决方法就简单了,直接对==的情况加下处理即可。另外网上也提供了指定使用排序算法的解决方案(添加JVM参数:-Djava.util.Arrays.useLegacyMergeSort=true ),这个我没有试验

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM