问题:
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循环。