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…
问题:Comparison method violates its general contract!报错 Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { : -;// 错误的方式 } }); 解决方案 先说如何解决,解决方式有两种. 修改代码 上面代码写的本身就有问题,第4行没有考虑o1 == o2的情况,再者说我们不需要自己去比…
java.lang.IllegalArgumentException: Comparison method violates its general contract! 原因 JDK7中的Collections.Sort方法实现中,如果两个值是相等的,那么compare方法需要返回0,否则 可能 会在排序时抛错,而JDK6是没有这个限制的. 在 JDK7 版本以上,Comparator 要满足自反性,传递性,对称性,不然 Arrays.sort, Collections.sort 会报 Ille…
1.摘要 前一阵遇到了一个使用Collections.sort()时报异常的问题,跟小伙伴@zhuidawugui 一起排查了一下,发现问题的原因是JDK7的排序实现改为了TimSort,之后我们又进一步研究了一下这个神奇的算法. 2.背景 先说一下为什么要研究这个异常,前几天线上服务器发现日志里有偶发的异常:   1 2 3 4 5 6 7 8 9 java.lang.IllegalArgumentException: Comparison method violates its genera…
项目上嵌套结果集查询,查询的列表再根据每个id进行查询计算,嵌套的sql如下: SELECT SUM(IFNULL(t.out_rate,0)) totalOutRate, SUM(IF(IFNULL(t.pre_power,0)-IFNULL(t.power,0)<0,0,IFNULL(t.pre_power,0)-IFNULL(t.power,0))) totalPower FROM ( SELECT i.id id,i.`station_id` station_id,i.`out_rate…
转载: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.…
图解JDK7的Comparison method violates its general contract异常 楼主分析的很详细,能力有限,我看得迷迷糊糊的,不过大致知道这个错误的起因了.学习了,谢谢! 以后就记着,java7下,实现compare方法必须有一个返回0的情况. jdk 7下排序需注意. http://blog.2baxb.me/archives/993 记录,待续...…
参考: 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的实现方法中,没有处理好两个比较对象相等的情况.…
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…
项目运行期间出现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 异常解决 在你的代码前加一句 System.setProperty("java.util.Arrays.useLegacyMergeSort", "true"); 我也不知道什么原理,可是攻克了!!!哈哈…
最近在做产品需求的时候上线了一个新的产品需求,给用户多了一种新的排序排序规则,更加方便用户找到自己想要的东西.新版本发布后,QA 给我发了一个 线上崩溃 bug 链接,具体内容如下: 看到上面的链接,我有点懵逼了,就这排序还能给我搞出 bug 来?看到抛出的异常信息,也没有见过,于是直接百度搜索了. 一百度,发现很多人遇到这个问题,下面简单说下出现这个问题的原因: 在 JDK7 版本以上,Comparator 要满足自反性,传递性,对称性,不然 Arrays.sort,Collections.s…
昨晚上线,线上报了一个问题,用的jdk8,用的collections.sort方法, public static void main(String[] args) { List<Integer> results = new ArrayList<>(); for(int i =0;i<100000;i++){ results.add((int)(Math.random()*1000)); } System.out.println(JsonUtil.toString(result…
这个错误就是写比较器的时候少写了返回值的情况: 比如: Collections.sort(list, new Ordering<QtmSysUserListDto>() { @Override public int compare(QtmSysUserListDto arg0, QtmSysUserListDto arg1) { if(arg0.getFlag().length()>arg1.getFlag().length()){ return -1; }else if(arg0.ge…
Collections.sort(listMonthlyUsage, new Comparator<MonthlyUsageDto>() { //按照元素从小到大排序 @Override public int compare(MonthlyUsageDto o1, MonthlyUsageDto o2) { if(o1.getCstId() > o2.getCstId()) return 1; else return -1; // return o1.getCstId() - o2.ge…
When it's the case that each instance of the class is equal to only itself. 1. Each instance of the class is inherently unique. 2. You don't care whether the class provides a "logical equality" test. 3. If a superclass has already overridden equ…
Overriding the equals method seems simple, but there are many ways to get it wrong, and consequences can be dire. The easiest way to avoid problems is not to override the equals method, in which case each instance of the class is equal only to itself…
博主最近遇到了这个问题,解决情况如下 第一种情况:前台页面的表单在一些情况下没有指定POST方法: Ajax没有指定POST方法: 后台方法在一定情况下需要指定POST方法: 第二种情况:前端参数类型与后台数据库中的存储类型不一致导致错误: 这种情况(1)如果只需从前台获取则只需要将前台参数名避免与数据库中参数名一致 (2)如果只需传递参数,则可以用指定类型接收以后,自行转格式在放回数据库或实体类,表单等 (3)彻底解决的办法,很简单,再创建一个实体类或者在实体类中再添加两个所需的参数类型…
问题描述1 使用spark-shell ,sc.textFile("hdfs://test02.com:8020/tmp/w").count 出现如下异常: java.lang.RuntimeException: Error in configuring object at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109) at org.apache.hadoop.util.Refle…
Collections.sort 异常 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.mergeForceCollapse(TimSort.jav…
本文基于JDK 1.8.0_211撰写,基于java.util.Arrays.sort()方法浅谈目前Java所用到的排序算法,仅个人见解和笔记,若有问题欢迎指证,着重介绍其中的TimSort排序,其源于Python,并于JDK1.7引入Java以替代原有的归并排序. 引入 Arrays.Sort方法所用的排序算法主要涉及以下三种:双轴快速排序(DualPivotQuicksort).归并排序(MergeSort).TimSort,也同时包含了一些非基于比较的排序算法:例如计数排序.其具体最终使…
Problem: Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), determine if a person could attend all meetings. For example,Given [[0, 30],[5, 10],[15, 20]],return false. Analysis: The problem is…
在项目中使用了Collections.sort(list, comparator)对集合进行了排序,偶然间遇到异常IllegalArgumentException: "Comparison method violates its general contract!" 而这个异常是在Java 7中加入的,因而使用Java 7之前的环境是没问题的. 导致这个异常的原因是comparator的compare()中的比较条件写的不规范导致的,因为从Java 7开始Arrays的默认排序从之前的…
本来准备看Java容器源码的.但是看到一开始发现Arrays这个类我不是很熟,就顺便把Arrays这个类给看了.Arrays类没有什么架构与难点,但Arrays涉及到的两个排序算法似乎很有意思.那顺便把TimSort算法和双指针快速排序也研究一下吧. 首先强调一下,这是个稳定的排序算法 看过代码之后觉得这个算法没有想象的那么难.逻辑很清晰,整个算法最大的特点就是充分利用数组中已经存在顺序.在归并的过程中有一个 Galloping Mode(翻译过来可以叫 飞奔模式),这是整个排序算法中最不寻常的…
(原) 今天看了一下现场的环境,发现有个其它部门的项目用到了这样一个参数: -Djava.util.Arrays.useLegacyMergeSort=true 于是查看了一下什么作用. 在JDK1.6和JDK1.7的版本中,使用comparator排序可能在1.6版本中正常运行,而在1.7版本有时会报异常,IllegalArgumentException(异常的内容大概是:Comparison method violates its general contract!). 在JDK7的不兼容列…
一.前言 有时我们需要对类按照类中的某一个属性(或者多个属性)来对类的对象进行排序,有两种方法可以实现,一种方法是类实现Comparable<T>接口,然后调用Collections.sort(List)方法进行排序,另一种方法是类不实现Comparable<T>接口,而在排序时使用Collections.sort(List, Comparator<T>)方法,并实现其中的Comparator<T>接口. 二.排序实现 假设有一个学生类Student,包含两…
java如何对ArrayList中对象按照该对象某属性排序 (从小到大) 两种方法: 方法一:Comparator<KNNNode> comparator = new Comparator<KNNNode>() { @Override public int compare(KNNNode o1, KNNNode o2) { System.out.println("进入 compare function"); // TODO Auto-generated meth…
合并区间 给出若干闭合区间,合并所有重叠的部分. 样例 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ] ] 挑战 O(n log n) 的时间和 O(1) 的额外空间. 思路是清晰的,代码是混乱的.先用Collection.sort()方法对List排序.当然也可以先toArray()然后用Arrays.sort()排序.但是都需要写一个实现Comparator接…