转载: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…
参考: 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的实现方法中,没有处理好两个比较对象相等的情况.…
1.摘要 前一阵遇到了一个使用Collections.sort()时报异常的问题,跟小伙伴@zhuidawugui 一起排查了一下,发现问题的原因是JDK7的排序实现改为了TimSort,之后我们又进一步研究了一下这个神奇的算法. 2.背景 先说一下为什么要研究这个异常,前几天线上服务器发现日志里有偶发的异常:   1 2 3 4 5 6 7 8 9 java.lang.IllegalArgumentException: Comparison method violates its genera…
项目运行期间出现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…
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的情况,再者说我们不需要自己去比…
生产环境出现的错误排查,错误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.…
The ONE跑MaxProp.Prophet可能(取决于你JDK的版本)会报“java.lang.IllegalArgumentException: Comparison method violates its general contract!”错误,导致无法仿真. Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contrac…
public static void main(String[] args) { List<Long> ret = new ArrayList<>(); int n = 103000; for(int i=0;i<n;i++){ ret.add(new Random().nextLong()); } Collections.sort( ret , new Comparator<Long>(){ @Override public int compare(Long o…