• 错误如下:
  • 代码如下:

刚开始运行,没有什么问题,当我数据量一大的时候,就开时抛出异常,然后一点点拆解,我发现
当nums1和nums2如下时,即list存在太多相同的数组就会抛出这个异常。

     int[]nums1 = {-1,-1,0,0,1,1};int[] nums2 ={-1,-1,0,0,1,1};
  • 改进后的代码

当两个元素相等时,返回0即可。 但问题又来了,前面我有一些数据比较也是相等的,并没有报这个异常,然后就去百度,查资料。
解释如下:
在 JDK7 版本以上,Comparator 要满足自反性,传递性,对称性,不然 Arrays.sort,Collections.sort
会报 IllegalArgumentException 异常。

  • 自反性:当 两个相同的元素相比时,compare必须返回0,也就是compare(o1, o1) = 0;

  • 反对称性:如果compare(o1,o2) = 1,则compare(o2, o1)必须返回符号相反的值也就是 -1;

  • 传递性:如果 a>b, b>c, 则 a必然大于c。也就是compare(a,b)>0, compare(b,c)>0,
    则compare(a,c)>0

回到上面的例子,当ab 时,我返回的是-1,假设返回-1是a>b, 当 bc时 返回的也是 -1 即b>c,
当c==a时,返回的也是 -1 ,这个时候底层在调用TimSort中mergeHi()进行数据合并是就会出现这样的问题,从而抛出异常。
所以在使用Comparator 接口的比较方法时,一定要规范返回值。

Comparison method violates its general contract 出现原因和解决方法相关推荐

  1. Collections.sort()排序使用TimSort排序报Comparison method violates its general contract 原因

    前段时间升级JDK后,之前的功能报java.lang.IllegalArgumentException: Comparison method violates its general contract ...

  2. fastjson 序列化问题:Comparison method violates its general contract

    fastjson 序列化问题:Comparison method violates its general contract 问题重现 今天在测试接口的时候,调用了Mybatis Plus 分页查询的 ...

  3. java异常排列方式_java中排序报:Comparison method violates its general contract异常的解决...

    前言 上周线上的一段排序的java代码出现了一个Comparison method violates its general contract,在解决这个问题的途中学到了一些知识这里总结分享一下. 异 ...

  4. 排序问题排查Comparison method violates its general contract!

    通过List.sort对元素进行排序,测试阶段没发现,在st测试的时候报了这个错误."Comparison method violates its general contract!&quo ...

  5. 处理 Comparable接口不严谨导致Comparison method violates its general contract!

    本文主旨是记录问题解决过程 出错的日志 Shutting down VM --------- beginning of crash FATAL EXCEPTION: main Process: com ...

  6. java.lang.IllegalArgumentException: Comparison method violates its general contract

    一.简介 本篇文章讨论ArrayList.sort方法报错: java.lang.IllegalArgumentException: Comparison method violates its ge ...

  7. android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题

    android  java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题 jav ...

  8. Comparison method violates its general contract!

    最近项目中有许多地方用到了集合排序,不是自然排序,必须的自己实现排序逻辑了. java提供实现排序接口有两个Comparable与Comparator. 我简单理解: 1.Comparable接口是实 ...

  9. java异常:Comparison method violates its general contract解决

    就在五一放假的前一天凌晨,收到一个测试同学发来的消息,说有个接口访问出现了问题,页面如下: 第二天早上紧急查看了线上日志,发现确实是因为这个告警导致返回问题 通过这条堆栈信息查了一些资料 Compar ...

最新文章

  1. C语言程序设计 细节总结(第8章 指针)
  2. 两路虚拟化服务器,服务器虚拟化(二)
  3. C语言 字符串的读取
  4. java不可变量有哪些_5.Java变量
  5. 如何干掉网易云音乐?这儿有个可行性未知的技术方案
  6. POJ - 2676 Sudoku(dfs)
  7. C++PrimerCH2
  8. Spring Boot flyway的启动时机比较早
  9. chrome jsp 显示不正常_selenium+java谷歌浏览器 网站打开不正常
  10. oracle迁移数据到mysql
  11. Android 科大讯飞离线语音识别
  12. 【STM32】UART串口通信无法通信问题(SSCOM)
  13. biopython有什么用_Biopython介绍
  14. 张冬:OpenPOWER CAPI为什么这么快?(一)
  15. 一些过时的免杀技巧 仅供参考
  16. gl.glenable()介绍
  17. 各大高校自曝状态一览 排名不分先后
  18. 视频教程-python全栈习题课-Python
  19. 苹果a10处理器_苹果“芯”基建简史:自己掌握不了核心技术 乔布斯也得干着急...
  20. 安卓如何将数据转到iPhone上?

热门文章

  1. spring-boot、jeecg-boot中解除shiro限制了上传视频文件,以及设置上传文件大小的限制
  2. 一种gps速度漂移过滤的方法
  3. 基于URL特征的网站结构信息挖掘
  4. 微积分:闭区间上 有界、可积、连续、可导 的强弱关系
  5. 回炉再造Css Layout
  6. Java回炉学习(七)
  7. Stata:边际效应分析
  8. 推特登录出错后没有拿到错误返回
  9. Linux基础命令(补充:命令行提示字符加颜色)
  10. 各大手机厂商开发者文档网址