Java Exception(Comparison method violates its general contract)

来源:互联网 发布:网络推广赚钱 编辑:程序博客网 时间:2024/06/11 05:27

代码

Collections.sort(users.getMenuProfiles(), new Comparator<UserMenuProfile>() {    @Override    public int compare(UserMenuProfile item1, UserMenuProfile item2) {        /* 报错前未添加        if (item1.getLastHitTime() == item2.getLastHitTime()) {            return 0;        }         */        if (item1.getLastHitTime() == null) {            return 1;        } else if (item2.getLastHitTime() == null) {            return -1;        } else {            return item2.getLastHitTime().compareTo(item1.getLastHitTime());        }    }});

异常

 java.lang.IllegalArgumentException: Comparison method violates its general contract!    at java.util.TimSort.mergeLo(TimSort.java:747)    at java.util.TimSort.mergeAt(TimSort.java:483)    at java.util.TimSort.mergeCollapse(TimSort.java:410)    at java.util.TimSort.sort(TimSort.java:214)    at java.util.TimSort.sort(TimSort.java:173)    at java.util.Arrays.sort(Arrays.java:659)    at java.util.Collections.sort(Collections.java:217)

漏洞

if (item1.getLastHitTime() == null)判定null大于任何值,这将导致同为null的两个值,却被判定为不相等,自相矛盾啊,哎,水哦!

参考链接: Comparison method violates its general contract

0 0
原创粉丝点击