天天看點

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

繼續閱讀