图解JDK7的Comparison method violates its general contract异常 楼主分析的很详细,能力有限,我看得迷迷糊糊的,不过大致知道这个错误的起因了.学习了,谢谢! 以后就记着,java7下,实现compare方法必须有一个返回0的情况. jdk 7下排序需注意. http://blog.2baxb.me/archives/993 记录,待续...…
1.摘要 前一阵遇到了一个使用Collections.sort()时报异常的问题,跟小伙伴@zhuidawugui 一起排查了一下,发现问题的原因是JDK7的排序实现改为了TimSort,之后我们又进一步研究了一下这个神奇的算法. 2.背景 先说一下为什么要研究这个异常,前几天线上服务器发现日志里有偶发的异常:   1 2 3 4 5 6 7 8 9 java.lang.IllegalArgumentException: Comparison method violates its genera…
最近在做产品需求的时候上线了一个新的产品需求,给用户多了一种新的排序排序规则,更加方便用户找到自己想要的东西.新版本发布后,QA 给我发了一个 线上崩溃 bug 链接,具体内容如下: 看到上面的链接,我有点懵逼了,就这排序还能给我搞出 bug 来?看到抛出的异常信息,也没有见过,于是直接百度搜索了. 一百度,发现很多人遇到这个问题,下面简单说下出现这个问题的原因: 在 JDK7 版本以上,Comparator 要满足自反性,传递性,对称性,不然 Arrays.sort,Collections.s…
参考: Comparison method violates its general contract Comparison method violates its general contract! 比较器报错:Comparison method violates its general contract 图解JDK7的Comparison method violates its general contract异常 主要是因为在compare的实现方法中,没有处理好两个比较对象相等的情况.…
转载:http://www.tuicool.com/articles/MZreyuv 异常信息 java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeHi(TimSort.java:868) at java.util.TimSort.mergeAt(TimSort.java:485) at java.util.TimSort.me…
生产环境出现的错误排查,错误log如下 java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeLo(TimSort.java:747) ~[na:1.7.0_40] at java.util.TimSort.mergeAt(TimSort.java:483) ~[na:1.7.0_40] at java.util.TimSort.…
java.lang.IllegalArgumentException: Comparison method violates its general contract! 原因 JDK7中的Collections.Sort方法实现中,如果两个值是相等的,那么compare方法需要返回0,否则 可能 会在排序时抛错,而JDK6是没有这个限制的. 在 JDK7 版本以上,Comparator 要满足自反性,传递性,对称性,不然 Arrays.sort, Collections.sort 会报 Ille…
问题:Comparison method violates its general contract!报错 Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { : -;// 错误的方式 } }); 解决方案 先说如何解决,解决方式有两种. 修改代码 上面代码写的本身就有问题,第4行没有考虑o1 == o2的情况,再者说我们不需要自己去比…
项目运行期间出现Comparison method violates its general contract!异常,网上查阅了一下,原因还是比较明确的: Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 > o2 ? 1 : -1;// 错误的方式 } }); 查看代码写的本身是问题的,第4行没有考虑o1…
android  java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题 java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeLo(TimSort.java:) at java.util.TimSort.mer…