Comparison method violates its general contract

排序问题排查Comparison method violates its general contract! 通过List.sort对元素进行排序,测试阶段没发现,在st测试的时候报了这个错误。“Comparison method violates its general contract!”。 具体堆栈信息: 看起来没什么问题,但是却报了一个错,“比较方法违反其一般合同”。 在 JDK7 版本以上,Comparator 要满足自反性,传递性,对称性,不然 Arrays.sort,Collections.sort会报 IllegalArgumentException 异常。 自反性:当 两个相同的元素. 阅读详情

Collections.sort(list, new Comparator<Integer>() {
	@Override
	public int compare(Integer o1, Integer o2) {
		// return o1 > o2 ? 1 : -1;
		return o1.compareTo(o2);// 正确的方式
	}
});

经过搜索得知,在JDK7以后,实现Comparable接口后,要满足一下三个特性:

1) 自反性:x,y 的比较结果和 y,x 的比较结果相反。

2) 传递性:x>y,y>z,则 x>z。

3) 对称性:x=y,则 x,z 比较结果和 y,z 比较结果相同。

collections.sort()方法异常,原因:

1. 比较对象存在null等。

if (this.xxx == null && o.xxx == null) {
    return 0;
}
if (this.xxx == null) {
    return 1;
}
if (o.xxx == null) {
    return -1;
}

2. 可能为JDK版本不兼容的问题,JDK7及以后可能会异常,因版本更新,未兼容老版本。

解决方法,排序前插入如下:

System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");

参考:

https://www.cnblogs.com/wendelhuang/p/7356797.html

方差分析ANOVA、T检验、卡方检验的区别 T检验和ANOVA都是用来看样本之间均值是否相等,但是两者又有什么区别呢? 卡方检验是用来看分类变量之间有没有相关性。 自变量X类型 自变量X组数 因变量Y类型 分析方法 离散(类别) 仅仅2组 连续(均值) t检验 离散(类别) 2组及以上 连续(均值) ANOVA 离散(类别) 2组及以上 离散(类别) 卡方检验 进一步细分 方差分析 从理论上讲,方差分析有两个前提条件,一是因变量Y需要满足正态性要求,二是满足方差齐检验。 方差不齐时可使用‘非参数检验’,同时还可使用wel 阅读详情

相关推荐

STM32----SPI+DMA高效读写外部Flash的配置与实战

本文详细介绍了STM32通过SPI+DMA高效读写外部Flash的配置与实战方法。针对大量数据传输场景,使用DMA技术可显著提升系统效率,释放CPU资源。文章包含完整的代码实现、常见问题调试技巧以及性能优化建议,帮助开发者快速掌握这一关键技术。

pea55的博客 1031

帆软报错Comparison method violates its general contract!

红框的一对二,且下图红框D5的左父子格是B5,A5还设置排序是D5,导致报错。把D5的左父子格设置成A5即可解决。首先,我这边报错的原因是因为。

weixin_48277834的博客 423

目标检测中回归损失函数(L1Loss,L2Loss,Smooth L1Loss,IOU,GIOU,DIOU,CIOU,EIOU,αIOU ,SIOU)

为了解决CIoU的问题,有学者在CIOU的基础上将纵横比拆开,提出了EIOU Loss,并且加入Focal聚焦优质的预测框,与CIoU相似的,EIoU是损失函数的解决方案,只用于训练。在错误率小的地方,梯度的值也应当小,反之在错误率大的地方,梯度也应当大,因为这时候我们需要对错误率小的情况进行微调,而错误率大的地方进行大刀阔斧的调整;如下图所示,三种情况IoU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。DIoU的作者考虑到,在两个框中心点重合时,c与d的值都不变。

zyw2002的博客 6631

“Comparison method violates its general contract!”问题原因及解决办法

开发中踩到的坑。通过arraylist.sort对元素进行排序,测试阶段没发现,上线后不久报了这个错误。“Comparison method violates its general contract!”。查了一些资料,下面总结一下。先贴下出错的代码: stus.sort((o1, o2) -> { if(o1 == null || o2 == null || o1 == o2) { return 0; }

samur2的博客 5万+

自组织映射神经网络(SOM)

目录 1 背景:自组织(竞争型)神经网络 2竞争学习的概念与原理 2.1 竞争学习的步骤 2.2 示例 3SOM典型结构 4SOM网的权值调整域 5 SOM Kohonen 学习算法 6 SOM示例 7SOM设计细节 7.1输出层设计 7.2输出层节点排列的设计 7.3 权值初始化问题 7.4学习率的设计 7.5设计拓扑领域 8SOM功能分析 8.1 保序映射 8.2数据压缩 8.3 特征提取 9自组织映射神经网络与K均值算法的区别...

weixin_39910711的博客 1万+

LVGL 组件对齐方式说明

本文说明 LVGL(以 v8 为例)中常用的 lv_align_t对齐选项的含义与用法,对应界面设计工具里下拉列表中的以及等命名。

摸鱼专家 131

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

就在五一放假的前一天凌晨,收到一个测试同学发来的消息,说有个接口访问出现了问题,页面如下: 第二天早上紧急查看了线上日志,发现确实是因为这个告警导致返回问题 通过这条堆栈信息查了一些资料 Comparison method violates its general contract,是因为sort排序中重写compare方法引发的异常,在sort排序中重写的方法一定要满足:可逆比较 Comparator<Integer> c = (o1, o2) -> { if (o1.

许小乖……是总攻 9272

捷联惯导,其实没有你想象的那么复杂!(附:惯导嵌入式应用中需要的一些C代码)

摘要:捷联惯导系统将惯性测量单元固连于运动载体,通过核心算法实现导航解算。系统首先进行传感器误差补偿和初始对准,然后利用陀螺和加速度计数据,通过姿态更新算法(如四元数法)计算载体相对于地理系的姿态。加速度数据经比力方程转换后积分得到速度和位置,过程中需补偿圆锥误差和划船效应。捷联惯导通过数字平台替代物理平台,实现了载体坐标系与导航坐标系的实时转换,是当前惯性导航系统的主流方案。

victoryqian528的博客 270

java.lang.IllegalArgumentException: Comparison method violates its general contract!异常分析及解决办法

直接调用Collections的sort: Collections.sort(keywordList); 出现了如下错误: Exception in thread “main” java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.ComparableTimSort.mergeLo(ComparableTimSort.java:744) at java.util.

qq_39918677的博客 1万+

基于STM32F1XX 、HAL库的OPT4001-Q1环境光传感器驱动应用C语言程序设计

OPT4001-Q1 的输出是半对数 的,具有 9 个二进制对数满量程照度范围,每个范围内具有高度线性响应,使得 PicoStar™ 型号的测量能力为 312.5μlux 至 84klux,USON 型号的测量能力为 400µlux 至 107klux。// 禁用中断(示例)

PP_Cottage的博客 462

嵌入式工程师成长之路(1)——元件基础(完整版)

为什么你的电路总是“玄学”故障?答案藏在这些元件里! 0欧电阻竟能引发信号反射?5V转3.3V电平匹配失败导致MCU烧毁?电容降压设计让电源“滋滋”响?——这些坑,本文全填平! 优快云硬件领域头部博主十年踩坑经验汇总,覆盖电阻、电容、电感核心难点+高频实战问题,让你从“调试地狱”直通“一次成功”!

云轩阁 2万+

这个坑,你要注意:Comparison method violates its general contract!

背景有部分业务需要进行排序,对比的对象是某实体里的金额(double 类型),这样,我们实现了自定义的比较类,结果运行一段时间之后报了错误:Comparison method violates its general contract! ,经过校验,发现错误出现在自定义排序上,经网上各种查阅资料发现是jdk7的兼容问题,以下将解决过程分享给大家。错误截图:重写的比较方法:解决方案先说如何解决,解决

ESOO 3万+

从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡

YOLOv11结合OpenCV技术,精准识别和计数鸡蛋与鸡,广泛应用于养殖场、市场监控和自动化包装。通过深度学习与计算机视觉,提升农业生产效率,让智能化管理更简单高效。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 1207

Comparison method violates its general contract!

最近项目中有许多地方用到了集合排序,不是自然排序,必须的自己实现排序逻辑了。 java提供实现排序接口有两个Comparable与Comparator。 我简单理解: 1.Comparable接口是实现在需要排序的单个对象上的,例如:Student学生类,根据学号或其他属性排序,Student类就要implements实现Comparable接口,并重写int...

天生卷发 3万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

在 JDK7 版本以上,Comparator 要满足自反性,传递性,对称性

weixin_41653901的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

项目在线上运行时突然出现了几百封异常邮件,过了一段时间又自动好了。 项目异常报错信息是 Comparison method violates its general contract 在顺着堆栈信息查找下去,发现是sort排序中重写compare方法引发的异常。 在网上查找资料和阅读了sort的源码之后得出结论: 在sort排序中重写的方法一定要满足可逆比较 Comparator&amp;lt;Inte...

TomCosin的博客 5万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Comparison method violates its general contract!报错解决方法

今天遇到了一个Comparison method violates its general contract!问题,本来是同一个方法一个取了前十后十,一个是显示全部,然后一个报错,一个却能正常问题,排序代码如下 public Comparator down = new Comparator() { @Override public int compare(ZcglZlcgsyl o1, ZcglZ...

qq_36802747的博客 4271

解决 Comparison method violates its general contract!

问题:Comparison method violates its general contract!报错 1 Collections.sort(list, new Comparator<Integer>() { 2 @Override 3 public int compare(Integer o1, Integer o2) { 4 ...

dielucuan8830的博客 397

Java 排序异常 Comparison method violates its general contract

写了一段排序的代码,意思是o1对象的开始时间小于o2的开始时间时不交换o1,o2的顺序,否则交换顺序 if (o1.getTimeStart().getTime() < o2.getTimeStart().getTime()) { return -1; } else { return 1; ...

banshahuang5695的博客 916

java使用compareTo报Comparison method violates its general contract 异常

java.lang.IllegalArgumentException: Comparison method violates its general contract! 莫名其妙的出现一个错误,源代码如下: //对右侧栏进行排序 将 # 丢在最后 Collections.sort(mIndexDatas, new Comparator<String&g...

Zeno2017的博客 725

Comparison method violates its general contract! 神奇的报错

Comparison method violates its general contract

Stronger的博客 5055

idea项目报错Comparison method violates its general contract

idea项目报错Comparison method violates its general contract! 代码之前是没有任何问题的,早上一上班竟然就报错,然后我就百度了报错信息,看到了一个博主写的非常的详细,我就记录一下我的错误,转载,感谢! https://www.cnblogs.com/firstdream/p/7204067.html 报错信息 java.lang.IllegalArgumentException: Comparison method violates its general

qq_46056826的博客 495

图解JDK7的Comparison method violates its general contract异常

1.摘要 前一阵遇到了一个使用Collections.sort()时报异常的问题,跟小伙伴@zhuidawugui 一起排查了一下,发现问题的原因是JDK7的排序实现改为了TimSort,之后我们又进一步研究了一下这个神奇的算法。 2.背景 先说一下为什么要研究这个异常,前几天线上服务器发现日志里有偶发的异常: java.lang.IllegalArgumentEx

赶路人儿 6130
上一篇: java中分页思路
下一篇: eclispe创建新项目并部署到svn
hellorichen
博客等级 码龄13年 199粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值