Arrays.asList將數組轉換成集合,不可進行add和remove操作的原因

問題:

Arrays.asList將數組轉換成集合,不可進行add,addAll和remove操作:

    public static void main(String[] args) {
        List<String> strings = Arrays.asList("dddd", "dsad", "dsawe", "11111");
        strings.add("a");
        List strings1 = Arrays.asList("457", "999");
        strings.addAll(strings1);
        System.out.println(strings1.toString());
    }

在這裏插入圖片描述

原因:

查看源碼:
在這裏插入圖片描述
繼續往下查看:
在這裏插入圖片描述

new了一個ArrayList集合,注意了,這個可不是ArrayList類,而是Arrays裏面的一個靜態內部類;而該ArrayList類中並無add,remove等方法;

查看父類AbstractList源碼:
在這裏插入圖片描述
發現當調用add,remove等方法時會走到父類的方法中,直接拋出異常!

結論:

用asList轉換的代碼是返回List的實現類ArrayList集合對象;但是集合大小固定,無法添加和刪除。

解決辦法:

將數組轉換成一個可以具有正常添加和刪除操作的List即可
比如:直接new ArrayList<…>(Arrays.asList(a))放入另一個ArrayList

    public static void main(String[] args) {
        List<String> strings = new ArrayList<>(Arrays.asList("dddd", "dsad", "dsawe", "11111"));
        strings.add("a");
        List strings1 = Arrays.asList("457", "999");
        strings.addAll(strings1);
        System.out.println(strings.toString());
    }

也可以新建一個new ArrayList<>(),使用Collections.addAll(list, strings)或是for循環。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章