collection之list

几个常见的误区

Arrays.asList()

Arrays.asList()生成的list无法执行add,remove操作

1
2
3
4
5
6
7
8
public static void (String[] args) {
String[] ars = new String[]{"a","b"};
List<String> l = Arrays.asList(ars);
System.out.println(l.toString());
l.add("c");
System.out.println(l.toString());
}

运行后报错

1
2
3
4
5
[a, b]Exception in thread "main"
java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.fmyblack.util.collection.ListDemo.main(ListDemo.java:13)

这是因为Arrays.asList()所产生的list其实是Arrays的内部类:java.util.Arrays$ArrayList,并不是我们熟知的java.util.ArrayList。`

java.util.Arrays$ArrayList继承了AbstractList类但并没有重载add()方法,而AbstractList的add方法如下:

1
2
3
public void add(int index, E element) {
throw new UnsupportedOperationException();
}

因此执行l.add("c")时会报java.lang.UnsupportedOperationException错误。

remove方法同理。