java1.7之后的比较器特别之处
在jdk1.7环境下使用Collectons.sort()方法:
比如:Collections.sort(list, new Comparator<Integer>());
就可能会出现异常:
java.lang.IllegalArgumentException: Comparison method violates its general contract!
意思是:参数不符合要求。
其实是第二个参数,比较器的问题。
jdk升级之后,对比较器的逻辑进行了严格要求,所以在大于或者等于或者大于等于的地方,很容易出错。
解决方案:
1. 在Collections.sort(xxx,xxx); 方法之前,加上一句话: System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
使之能够按照升级之前的逻辑来比较。
2.在比较器中修改,完善逻辑。
比如:
public int compare(ComparatorTest o1, ComparatorTest o2) {
return o1.getValue() > o2.getValue() ? 1 : -1;
}
改为:
public int compare(ComparatorTest o1, ComparatorTest o2) {
return o1.getValue() == o2.getValue() ? 0 : (o1.getValue() > o2.getValue() ? 1 : -1);
}
这样让逻辑更加严谨。
相关链接:
http://jxlanxin.iteye.com/blog/1814164
http://ju.outofmemory.cn/entry/63413
http://www.ithao123.cn/content-8176238.html
java1.7之后的比较器特别之处的更多相关文章
- Lua语言的特别之处
所谓特别,是相对的,是相对别的主流语言而言,有些也可能只是我个人看法. 1. 函数定义与调用,与代码位置的先后顺序有关,例如 calculate() function calculate() .... ...
- 实例句柄0x10000000有什么特别之处?What is so special about the instance handle 0x10000000?
当LoadLibrary函数返回特殊值时,客户想知道它意味着什么0x10000000.嗯,这意味着LIB被加载进了0x10000000?好的,这里有一些更多的信息:“我们正在尝试调试一个加载DLL的 ...
- 主函数特别之处:public static void main(String[] args)
public static void main(String[] args) public class Test_java {//主函数特殊之处 public static void main(Str ...
- JDK8下的HashMap有什么特别之处?
一.前言 上篇认真的分析了在JDK7下的HashMap, 如果还没看过的或者忘记了的可以先去回顾下,这样可以更好的了解JDK8下的HashMap基于JDK7做了什么改动.分析JDK8下的HashMap ...
- 【笨木头Lua专栏】基础补充02:函数的几个特别之处
没想到距离上一篇基础补充已经过了1年多了,近期准备捡回Lua,把基础都补补,今天来聊聊Lua的函数吧~ 0.环境 我突然对Lua又大感兴趣的最主要原因是,Cocos Code IDE開始浮出水面了,它 ...
- main特别之处
//package new_Object; public class Main{ public static void main(String[] args) { System.out.println ...
- 01:main特别之处
有点意思的main 图解运行结果解释:[:数组L:长类型ava.lang:包名String:字符串类型元素@:分界符667262b6:哈希值主函数特殊之处:public static void mai ...
- Python中作用域的特别之处
def a(): a = [] def aappend(): a.append(1) aappend() print a def b(): b = 1 def bchange(): b += 1 # ...
- Javascript里的if判断与逻辑运算符(||, &&)和比较运算符的特别之处
写JS时不可避免要用到 if 与 逻辑运算符( ||, &&). 如果你经常阅读Js的第三方组件源码, 会发现有一种写法作为初始化变量的方法经常出现. var variable = v ...
随机推荐
- Laravel7-验证器使用
- 微信小程序 地区选择器 和省市县三级联动 和button按钮分享
wxml代码: <view class="section__title"> 地区选择器 </view> <picker bindchange=&quo ...
- redis php使用实例
redis的操作很多的,以前看到一个比较全的博客,但是现在找不到了.查个东西搜半天,下面整理一下php处理redis的例子,个人觉得常用一些例子.下面的例子都是基于php-redis这个扩展的. 1, ...
- tensorflow源码剖析之framework-kernel
目录 什么是kernel kernel_def op_kernel kernel的注册 op_segment 关系图 涉及的文件 迭代记录 1. 什么是kernel 如果说op相当于操作的声明,那么k ...
- 05tensorflow分布式会话
一. tensorflow分布式 1. 概念 分布式Tensorflow是由高性能的gRPC框架作为底层技术来支持的.这是一个通信框架gRPC(google remote procedure ...
- 不带头结点的单链表(基于c语言)
本篇文章的代码大多使用无头结点的单链表: 相关定义: #include <stdio.h> #include <stdlib.h> #include <assert.h& ...
- Objects.equals有坑
前言 最近review别人代码的时候,发现有个同事,在某个业务场景下,使用Objects.equals方法判断两个值相等时,返回了跟预期不一致的结果,引起了我的兴趣. 原本以为判断结果会返回true的 ...
- Java基础——引用类型作为形参与返回值
一.具体类名作为形参与返回值 1.方法的形参是类名,其实需要的是该类的对象 比如有一个具体的猫类,我使用另一个类使用猫类的方法 public class CatOperator { public ...
- 6月6日 python复习 面向对象
1.面向对象编程 1.面向过程编程核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题 ...
- 什么是CPI
请参考这篇博客,很全面的解释了CPI https://www.cnblogs.com/diegodu/p/9366639.html