[ Error 分析] Comparison method violates its general contract!
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 o1, Long o2) {
return (int) (o2-o1);
}
});
}
Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:777)
at java.util.TimSort.mergeAt(TimSort.java:514)
at java.util.TimSort.mergeCollapse(TimSort.java:441)
at java.util.TimSort.sort(TimSort.java:245)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1454)
at java.util.Collections.sort(Collections.java:175)
一直以为没有什么问题,大于,小于,等于情况都考虑了。 原来原因是:integer overflow,看下面的例子就明白了。负数-正数=正数
o2:-273192312377492627
o1:3368764997970232313
o2-o1:1167472500
所以,这个compare里面定义的方法不符合compare的约束(传递性,对称性,反对称性)
PS:https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html#compare(T,%20T)
http://svn.python.org/projects/python/trunk/Objects/listsort.txt
最新文章
- IIS下配置PHP
- Linux Linux程序练习十八
- Myeclipse中打开接口实现类的快捷键
- 【转载】关于 Ubuntu 的小知识分享
- excel if判断时间段早晚班
- Spring MVC mapping[From Spring MVC Beginner&#39;s Guide]
- 关于VBox安装GhostXP出现蓝屏processr.sys 的解决办法
- 胸腺嘧啶“T”
- Android 不能勾选 Project Build Target
- 查看LINUX发行商版本与LINUX内核版本
- Java DOM4J读取XML
- SpringMVC注释启用
- Linux命令基础2-ls命令
- [LeetCode&;Python] Problem 70. Climbing Stairs
- pb 11 数据窗口空白,预览pb崩溃解决方案
- laravel 容器注入的坑
- GAN-生成对抗网络原理
- Python基础-内置函数、模块、函数、json
- MVC Json方法里的一个坑
- openfire维持在线状态,监听消息
热门文章
- Mongodb 和 Solr 实时同步
- thinkphp nginx 上配置 并解决get获取到数据现象
- 长尾分布,重尾分布(Heavy-tailed Distribution)
- 支持IE低版本的上传 大文件切割上传 断点续传 秒传
- String painter (hdu 2476 DP好题)
- 蓝桥杯 第三届C/C++预赛真题(7) 放棋子(水题)
- AWS系列-修改RDS时间(time_zone)
- org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x160fd6f04410017 after 0ms
- mvn命令上传jar
- wordpress添加关键字