IllegalArgumentException: Comparison method violates its general contract错误详细内容
来源:互联网 发布:怎么发网络短信 编辑:程序博客网 时间:2024/05/29 18:39
今天在开发的过程中出现了一个比较诡异的报错。
截取部分报错信息
度娘之后.原来是 jdk1.7中修改了 Array.sort的算法.不在使用之前MergeSort ,而是使用新的TimeSort,其对象间的要求更加严格
a). sgn(compare(x, y)) == -sgn(compare(y, x))
b). (compare(x, y)>0) && (compare(y, z)>0) 意味着 compare(x, z)>0
c). compare(x, y)==0 意味着对于任意的z:sgn(compare(x, z))==sgn(compare(y, z)) 均成立
详情阅读.Comparator<T>.compare 方法说明
解决以上错误的方法
1.更改内部实现:例如对于上个例子,就需要更改为
2.Java 7预留了一个接口以便于用户继续使用Java 6的排序算法:在启动参数中(例如eclipse.ini)添加-Djava.util.Arrays.useLegacyMergeSort=true
3.将这个IllegalArgumentException手动捕获住(不推荐)
截取部分报错信息
java.lang.IllegalArgumentException: Comparison method violates its general contract!at java.util.TimSort.mergeLo(TimSort.java:747) ~[na:1.7.0_65]at java.util.TimSort.mergeAt(TimSort.java:483) ~[na:1.7.0_65]at java.util.TimSort.mergeCollapse(TimSort.java:410) ~[na:1.7.0_65]at java.util.TimSort.sort(TimSort.java:214) ~[na:1.7.0_65]at java.util.TimSort.sort(TimSort.java:173) ~[na:1.7.0_65]at java.util.Arrays.sort(Arrays.java:659) ~[na:1.7.0_65]at java.util.Collections.sort(Collections.java:217) ~[na:1.7.0_65]
度娘之后.原来是 jdk1.7中修改了 Array.sort的算法.不在使用之前MergeSort ,而是使用新的TimeSort,其对象间的要求更加严格
a). sgn(compare(x, y)) == -sgn(compare(y, x))
b). (compare(x, y)>0) && (compare(y, z)>0) 意味着 compare(x, z)>0
c). compare(x, y)==0 意味着对于任意的z:sgn(compare(x, z))==sgn(compare(y, z)) 均成立
详情阅读.Comparator<T>.compare 方法说明
解决以上错误的方法
1.更改内部实现:例如对于上个例子,就需要更改为
public int compare(ComparatorTest o1, ComparatorTest o2) { return o1.getValue() == o2.getValue() ? 0 : (o1.getValue() > o2.getValue() ? 1 : -1); }
2.Java 7预留了一个接口以便于用户继续使用Java 6的排序算法:在启动参数中(例如eclipse.ini)添加-Djava.util.Arrays.useLegacyMergeSort=true
3.将这个IllegalArgumentException手动捕获住(不推荐)
0 0
- IllegalArgumentException: Comparison method violates its general contract错误详细内容
- 关于IllegalArgumentException: Comparison method violates its general contract!
- java.lang.IllegalArgumentException: Comparison method violates its general contract!
- 关于JDK7的IllegalArgumentException:Comparison method violates its general contract
- java.lang.IllegalArgumentException: Comparison method violates its general contract!
- java.lang.IllegalArgumentException: Comparison method violates its general contract!
- Java 错误解决之java.lang.IllegalArgumentException: 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!
- 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!
- Java开发网站总结——Servlet实现图片上传、验证码实现
- 你了解Cisco的PVST、PVST+和Rapid-PVST+吗
- vs2010 使用备忘
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- iptables配置——NAT地址转换
- IllegalArgumentException: Comparison method violates its general contract错误详细内容
- [Win32]获取当前系统可用磁盘空间最大的盘符
- 20141208 用js做个打飞机游戏 , 用div和img就够了 , ie8也能够支持
- 三十.内存初始化
- Fragment 完全解析(下)
- Java线程(五):线程池
- 多条件查询
- 了解黑客攻与防
- 使用Windbg查看系统SSDT表与ShadowSSDT表