首页 > 技术文章 > Arrays.asList()返回的集合不能进行add,remove等操作

java-spring 2021-09-18 14:58 原文

List<String> list = Arrays.asList(new String[]{"a", "b"});
list.add("a");

执行结果

进行其他改变数组大小的操作,都会抛出这个异常 Exception in thread "main" java.lang.UnsupportedOperationException

查看aslist方法源码

首先看出,返回的ArrayList只是java.util.Arrays中的内部类,并不是java.util.ArrayList

而且内部类ArrayList继承了AbstractList,但是并没有重写add,remove等方法,所以调用这些方法的时候调用的都是父类AbstractList中的方法。

我们先看下平常使用的java.util包下的ArrayList中add方法

我们看下父类AbstractList中的这些方法

 

直接就会抛出异常

所以Arrays.asList()返回的list仅支持那些不会改变集合大小的操作。

如果要用的话,也可以如下使用:

List<String> list = new ArrayList<>(Arrays.asList(new String[]{"a", "b"}));
list.add("c");
System.out.println(list);

把Arrays.asList()的结果作为构造器的参数传递给任何Collection。这样就可以正常操作了

结果如下:

 

推荐阅读