首页 > 技术文章 > comparison method violates 必现

go4mi 2020-03-10 18:12 原文

public static void main(String[] args) {
        // list size > 32
        List<Integer> list = new ArrayList<>();
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);

        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 > o2 ? 1 : -1;
            }
        });

        System.out.println(list);
    }

 

解决

public static void main(String[] args) {
        // list size > 32
        List<Integer> list = new ArrayList<>();
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);
        list.add(5);
        list.add(1);
        list.add(9);
        list.add(5);
        list.add(1);
        list.add(5);
        list.add(11);
        list.add(5);

        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.equals(o2) ? 0 : o1 > o2 ? 1 : -1;
            }
        });

        System.out.println(list);
    }

 

推荐阅读