获取java.lang.IllegalArgumentException:比较方法违反了其一般合同!一种算法,应该100%稳定

Sep*_*420 0 java exception comparator illegalargumentexception

不知道这怎么会变得不稳定.这在大多数情况下都可以正常工作,但是会抛出IllegalArgumentException和一些查询.

这就是全部,想不出更多相关细节.

private static void sortSearchResults(List<Map> l){
        Comparator<Map> comp = new Comparator<Map>(){
            public int compare(Map a,Map b){
                int aa=0,ba=0,as=0,bs=0;
                try{
                    aa = Integer.parseInt(""+a.get("activity"));

                }catch(Exception ex){
                }
                try{
                    ba = Integer.parseInt(""+b.get("activity"));
                }catch(Exception ex){
                }
                try{
                    as = Integer.parseInt(""+a.get("searchscore"));

                }catch(Exception ex){
                }
                try{
                    bs = Integer.parseInt(""+b.get("searchscore"));
                }catch(Exception ex){
                }


                if(as>bs)
                    return -1;
                else if(bs<as)
                    return 1;
                else{
                    if(aa>ba)
                        return -1;
                    else if(aa<ba)
                        return 1;
                    else
                        return 0;
                }

            }
            public boolean equals(Object o){
                return o==this;
            }
        };
        Collections.sort(l,comp);
    }
Run Code Online (Sandbox Code Playgroud)

Jes*_*per 5

if(as>bs)
    return -1;
else if(bs<as)
    return 1;
Run Code Online (Sandbox Code Playgroud)

as>bs并且bs<as意思完全相同.你可能意味着:

if(as<bs)
    return -1;
else if(as>bs)
    return 1;
Run Code Online (Sandbox Code Playgroud)