問題:
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循環。