Collections.sort报错,大神求分析、求答案

 Collections.sort(lcd1, new Comparator<CouponDto>(){
                    @Override
                    public int compare(CouponDto o1, CouponDto o2) {
                            if(o1.getCoupon().getListOrder2() > o2.getCoupon().getListOrder2()){
                                return -1;
                            }
                            if(o1.getCoupon().getListOrder2() == o2.getCoupon().getListOrder2()){
                                return 0;
                            }
                            return  1;
                    };

                });
    报Comparison method violates its general contract异常
            改成
    Collections.sort(lcd1, new Comparator<CouponDto>(){
                    @Override
                    public int compare(CouponDto o1, CouponDto o2) {
                            return -(o1.getCoupon().getListOrder2() - o2.getCoupon().getListOrder2());
                    };

                });
            就不再报错;
            各位大神,这个是怎么回事
 鄙视胡乱在网上抄一个答案的。

你的代码虽然满足了自反性,但是不满足偏序。jdk 1.7还要求偏序性。
比如a = 10 b = 8 c = 4,那么你的代码出现 comp(a,b) == comp(a, c),sort会假设b=c但是实际上是b>c

这个是因为jdk版本不同所用算法不同导致的,比如jdk6中应该是没问题的,而jdk7中就会报错,解决方法有两个,一是指定算法,二是比较的时候>,<,=,三种都加上

这个是因为jdk版本不同所用算法不同导致的,比如jdk6中应该是没问题的,而jdk7中就会报错,解决方法有两个,一是指定算法,二是比较的时候>,<,=,三种都加上

这个问答有bug啊,客户端提交回答的时候提示 提交失败,多点了几次就这这样了,手动尴尬

http://blog.csdn.net/ghsau/article/details/42012365