Comparison method violates its general contract!
2017-11-02 10:26
369 查看
废话少说,直接上报错信息(如下图)
最近公司app上有个列表时而报错,时而不报,复现问题不是很容易,翻看了下日志才知道是排序的地方有问题,这还是我第一次遇到,具体定位:Collections.sort(xxx),
于是再看对应的compareTo方法,如下
咋一看,这个倒序排列就是没有对==的情况进行处理,而是将==算作-1处理了,Google了一下,发现是由于jdk7排序换了新的算法Timsort,这样就会对排序的大小进行严格校验,而jdk6是没有对此进行校验的
所以解决方法就简单了,直接对==的情况加下处理即可。另外网上也提供了指定使用排序算法的解决方案(添加JVM参数:-Djava.util.Arrays.useLegacyMergeSort=true ),这个我没有试验
最近公司app上有个列表时而报错,时而不报,复现问题不是很容易,翻看了下日志才知道是排序的地方有问题,这还是我第一次遇到,具体定位:Collections.sort(xxx),
于是再看对应的compareTo方法,如下
@Override public int compareTo(xxx o) { return this.getPublishTime().getTime() < o.getPublishTime().getTime() ? 1 : -1; }
咋一看,这个倒序排列就是没有对==的情况进行处理,而是将==算作-1处理了,Google了一下,发现是由于jdk7排序换了新的算法Timsort,这样就会对排序的大小进行严格校验,而jdk6是没有对此进行校验的
所以解决方法就简单了,直接对==的情况加下处理即可。另外网上也提供了指定使用排序算法的解决方案(添加JVM参数:-Djava.util.Arrays.useLegacyMergeSort=true ),这个我没有试验
相关文章推荐
- 比较器报错:Comparison method violates its general contract
- 图解JDK7的Comparison method violates its general contract异常
- Comparison method violates its general contract!
- java错误Comparison method violates its general contract!
- Comparison method violates its general contract
- Comparison method violates its general contract
- Comparison method violates its general contract!
- 比较器报错:Comparison method violates its general contract
- Comparison method violates its general contract Exception
- 解决 Comparison method violates its general contract!
- Comparator异常:Comparison method violates its general contract!
- Android碰到 "Comparison method violates its general contract" 异常的解决方法
- 实现Comparable接口不严谨导致Comparison method violates its general contract!
- Comparison method violates its general contract!
- java.lang.IllegalArgumentException: Comparison method violates its general contract!
- [ Error 分析] Comparison method violates its general contract!
- Android 开发报错 Comparison method violates its general contract!
- 关于jdk7中 使用Collections的排序方法时报Comparison method violates its general contract!异常
- Java 异常解决之java.lang.IllegalArgumentException: Comparison method violates its general contract!
- eclipse3.7.0升级时(例如3.7.2)发生错误:Comparison method violates its general contract 解决