博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java1.7之后的比较器特别之处
阅读量:4356 次
发布时间:2019-06-07

本文共 915 字,大约阅读时间需要 3 分钟。

在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

 

转载于:https://www.cnblogs.com/neo-java/p/6830205.html

你可能感兴趣的文章
如何讓Android系統顯示CJK擴展區漢字
查看>>
Android 下拉选择绑定Value和Text值
查看>>
HTML+CSS小结
查看>>
Android防止按钮连续点击
查看>>
ElasticSearch Mapping中的字段类型
查看>>
数据库中主键和外键的设计原则
查看>>
怎样理解阻塞非阻塞与同步异步的区别?
查看>>
Xcode 警告信息处理:Format string is not a string literal (potentially insecure)
查看>>
关于jQuery表单校验的应用
查看>>
matplotlib----初探------5直方图
查看>>
jquery之ajax
查看>>
Pro Git(中文版)
查看>>
解决phpmyadmin-1800秒超时链接失效问题
查看>>
OpenGL第十一节:拉伸和过滤
查看>>
AlertDialog的onCreateDialog与onPrepareDialog用法
查看>>
swift菜鸟入门视频教程-12-21讲
查看>>
PL/SQL 异常处理程序
查看>>
javascript小白学习指南1---0
查看>>
div:给div加滚动栏 div的滚动栏设置
查看>>
java随机函数使用方法Random
查看>>