美文网首页
解决java.lang.IllegalArgumentExcep

解决java.lang.IllegalArgumentExcep

作者: 晖仔Milo | 来源:发表于2019-10-09 15:09 被阅读0次

今天在项目里使用 Collections.sort 方法是报错了

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
    at java.util.TimSort.mergeHi(TimSort.java:899)
    at java.util.TimSort.mergeAt(TimSort.java:516)
    at java.util.TimSort.mergeForceCollapse(TimSort.java:457)
    at java.util.TimSort.sort(TimSort.java:254)
    at java.util.Arrays.sort(Arrays.java:1512)
    at java.util.ArrayList.sort(ArrayList.java:1456)
    at java.util.Collections.sort(Collections.java:175)
    at milo.com.javatest.JavaMainClass.main(JavaMainClass.java:59)

我的修改方案如下

public class JavaMainClass {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Y");
        list.add("F");
        list.add("L");
        list.add("Y");
        list.add("J");
        list.add("H");
        list.add("W");
        list.add("Q");
        list.add(null);
        list.add("S");
        list.add("G");
        list.add(null);
        list.add("L");
        list.add("H");
        list.add("Q");
        list.add("W");
        list.add("Y");
        list.add("X");
        list.add("M");
        list.add("Z");
        list.add("L");
        list.add("Z");
        list.add("Z");
        list.add("H");
        list.add("Y");
        list.add("X");
        list.add("Q");
        list.add("W");
        list.add("J");
        list.add("D");
        list.add("J");
        list.add("L");
        list.add("L");

        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
//                危险写法,有安全隐患
//                if (o1 == null || o2 == null) {
//                    return 0;
//                }

//                稳妥写法
                if (o1 == null && o2 == null) {
                    return 0;
                }

                if (o1 == null) {
                    return 1;
                }

                if (o2 == null) {
                    return -1;
                }

                if (!o1.matches("^[A-Za-z]+$")) {
                    if (!o2.matches("^[A-Za-z]+$")) {
                        return 0;
                    } else {
                        return 1;
                    }
                } else {
                    if (!o2.matches("^[A-Za-z]+$")) {
                        return -1;
                    } else {
                        return o1.compareTo(o2);
                    }
                }
            }
        });


        for (String s : list) {
            System.out.print(s + ",");
        }

    }
}

java对compareTo方法的注解为

问题

虽然有了官方文档的帮助,问题也得到了解决,但我仍然不是很明白为什么这个异常就出现了,希望有大神看到此贴能给小弟指点一二。

相关文章

  • 解决java.lang.IllegalArgumentExcep

    java.lang.IllegalArgumentException: Scrapped or attached ...

  • 解决java.lang.IllegalArgumentExcep

    使用getExternalFilesDir(path) 替换掉Environment.getExternalSto...

  • 解决java.lang.IllegalArgumentExcep

    使用springboot,权限管理使用spring security,使用内存用户验证,但无响应报错:java.l...

  • 解决java.lang.IllegalArgumentExcep

    今天在项目里使用 Collections.sort 方法是报错了 我的修改方案如下 java对compareTo方...

  • 报错java.lang.IllegalArgumentExcep

    今天在使用recyclerView做效果图时,莫名出现了java.lang.IllegalArgumentExce...

  • 报错java.lang.IllegalArgumentExcep

    问题描述 使用maven集成spring-webmvc,在测试的时候报出了如下的异常: java.lang.Ill...

  • 【解决】

    解决理想 解决生活 解决让我平凡的错 解决孤单 解决折磨 解决一开始就着了的魔 解决饥饿 解决战火 解决核时代被抽...

  • 报错集锦

    问题一: 解决: 问题二: 解决: 问题三: 解决: 问题四: 解决: 问题五: 解决:

  • 解决 问题 解决

    你解决一个问题,就像当于解决无数个问题。听到这句话的时候我已经毕业了。回想之前的学习经历,一张试卷,碰到难题就放那...

  • some

    枪解决了, 炮解决了, 人解决了, 衣服解决了, 时间解决了, 地方解决了, 就看着车马飞驰, 结局降临, 吾事已毕。

网友评论

      本文标题:解决java.lang.IllegalArgumentExcep

      本文链接:https://www.haomeiwen.com/subject/bzhgpctx.html