天天看点

Java List remove时报UnsupportedOperationException

遇到的问题:

Java List remove时报UnsupportedOperationException

 解决后:

Java List remove时报UnsupportedOperationException

 源代码:

/**
     * 需求:删除字符串中的a8,并重新组成字符串
     * @param args
     */
    public static void main(String[] args) {
        String str = "a3,a4,a5,a6,a8";
        String[] moIds = str.split(StringPool.COMMA);
        //错误写法:
        // List<String> list = Arrays.asList(moIds);
        //改正后:
        ArrayList<String> list = new ArrayList<>(Arrays.asList(moIds));
        for (int i = list.size() - 1; i >= 0; i--) {
            if (list.get(i).equals("a8")) {
                list.remove(i);
            }
        }
        String moId = String.join(",", list);
        System.out.println(moId);
    }
           

问题分析:

为什么 Arrays.asList(arr)为什么不能remove和add,只到今天看了一眼Arrays底层源码,才发现这个问题

1.明明看上去返回的是ArrayList,但是仔细看就会发现,原来是静态内部类啊。

Java List remove时报UnsupportedOperationException

 2.Arrays继承了AbstractList类

Java List remove时报UnsupportedOperationException

 3.Arrays.add

Java List remove时报UnsupportedOperationException

继续阅读