zoukankan      html  css  js  c++  java
  • Collections.sort IllegalArgumentException

    java中用Collections.sort ,有时会报IllegalArgumentException错误,网上众说纷纭,终于在stak overflow上找到最靠谱答案。

    例如:

    1 Collections.sort(userItemList,new UserItemPairR());

    其中UserItemPairR()函数这么写,就有可能会报错:

    class UserItemPairR implements Comparator 
    {
        public int user;
        public int item;
        double r;
        @Override
        public int compare(Object o1, Object o2) {
    
            UserItemPairR uipr1=(UserItemPairR)o1;
            UserItemPairR uipr2=(UserItemPairR)o2;
            
            if(uipr1.r>uipr2.r)
                return -1;
            else
                return 1
        }
        
    }

    本意是当等于时就不用排了,放前放后都一样,但是这是有问题的,例如:

     当A=B时,compare(A,B)和compare(B,A)都会返回1,编译器不会知道他们相等,这就产生矛盾,就会抛出异常。

    应改为

     1 class UserItemPairR implements Comparator 
     2 {
     3     public int user;
     4     public int item;
     5     double r;
     6     @Override
     7     public int compare(Object o1, Object o2) {
     8 
     9         UserItemPairR uipr1=(UserItemPairR)o1;
    10         UserItemPairR uipr2=(UserItemPairR)o2;
    11         
    12         if(uipr1.r>uipr2.r)
    13             return -1;
    14         else if(uipr1.r<uipr2.r)
    15             return 1;
    16         else
    17             return 0;
    18     }
    19     
    20 }

    这样就不会抛异常了。

  • 相关阅读:
    C++构造与析构 yongmou
    坏习惯 yongmou
    Python 字符串方法
    python 列表推导式轻量级循环
    python 循环遍历字典元素
    python 短路逻辑和条件表达式
    python 迭代器
    一些关于面向对象设计的思考
    python map内建函数
    Python 列表
  • 原文地址:https://www.cnblogs.com/cloudssdut/p/3344497.html
Copyright © 2011-2022 走看看