String[] str = {"1","2",3};
List<String> list = Arrays.asList(str);
String 数组转成list<String> 之后,直接对list 进行操作,会出异常。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
String[] attr = {"1","2","3"};
List<String> listA = Arrays.asList(attr);
listA.removeAll(list);
System.out.println(listA);
}
运行时会抛如下异常
Exception in thread "main" java.lang.UnsupportedOperationExceptionat java.util.AbstractList.add(AbstractList.java:118)
原因是:
在使用Arrays.asList()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。
这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。
Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等 method在AbstractList中
是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,
但是Arrays$ArrayList没有override remove(),add()等,所以throw UnsupportedOperationException。
解决方法:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
String[] attr = {"1","2","3"};
List<String> listA = Arrays.asList(attr);
List<String> listB = new ArrayList<String>(listA);
listB.removeAll(list);
System.out.println(listB);
}