• 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 }

    这样就不会抛异常了。

  • 相关阅读:
    Choosing the Type at Runtime
    User-Defined Components Must Be Capitalized
    Computed property names
    Controlled Components
    Handling Event
    State
    props
    Functional and Class Components
    招聘漂亮的员工
    Spread Syntax
  • 原文地址:https://www.cnblogs.com/cloudssdut/p/3344497.html
Copyright © 2020-2023  润新知