此集合非彼集合-Arrays.asList()

前言

今天使用Arrays.asList();方法和两个数组arr1.removeAll(arr2);查交集

但出现java.lang.UnsupportedOperationException

报错代码(例):

String[] array = {"1","2","3","4","5"};
List<String> list = Arrays.asList(array);
list.add("6");

问题所在

查阅资料,发生问题的原因如下:

Arrays的asList方法返回的是Arrays的内部类ArrayList,它并不是java.util.ArrayList,只不过它们的父类都是AbstractList。

可以看到Arrays的内部类ArrayList并没有重写add和remove方法,所以当我调用Arrays的内部类ArrayList的add方法时实际上是集成父类AbstractList的add方法。
AbstractList的add方法抛出java.lang.UnsupportedOperationException异常

java.util.ArrayList的add方法重写了父类的方法,所以不会报错。

解决

重新建一个数组即可

String[] array = {"1","2","3","4","5"};
List<String> list = Arrays.asList(array);
List arrList = new ArrayList(list);
arrList.add("6");