zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    innerHTML,outerHTML,innerText,outerText
    vue生命周期
    vue属性监听
    vue计算属性(通过计算得来的属性)
    express脚手架的安装,以及ejs的语法
    mongoose的基本操作方法
    vue的基本指令
    MongoDB
    五分钟让你拥有自己的聊天室
    带你了解世界最先进的手势识别技术 -- 微软,凌感,Leap...
  • 原文地址:https://www.cnblogs.com/neo-java/p/6830205.html
Copyright © 2011-2022 走看看