1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void test() {
List<Integer> list = Arrays.asList(1, 2, 3);
list.add(4);
System.out.print(list.toString());
}
@Test
public void test2() {
List<Integer> list = Lists.newArrayList(1, 2, 3);
list.add(5);
System.out.print(list.toString());
}

上面的代码test会throw UnsupportedOperationException。test2使用了Guava工具类,正常输出数组内容。

查看源代码,Arrays.asList 创建的ArrayList是一个内部类,继承自AbstractList同时实现了RandomAccess和Serializable接口。而在抽象类AbstractList中,set add remove的定义是空的,默认throw new UnsupportedOperationException();

所以呢,在Arrays.asList出来的List是一个只读的列表,不支持新增、删除、设置。