1、将数组转换成集合
String [] arr = new String[]{"1", "2", "3"};
List<String> list = Arrays.asList(arr);
list.remove("1");
控制台报错:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.remove(AbstractCollection.java:293)
2、问题原因:
Arrays.asList(arr);
--------------------------------
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
这个 ArrayList;是Arrays类里的静态内部类,继承AbstractList,没有重写add()以及remove()方法,而是直接使用AbstractList类里的add()、remove()方法;
--------------------------------
List<String> stringList = new ArrayList<>();
直接 new ArrayList<>(),ArrayList类也是继承AbstractList,但是重写了AbstractList的add()、remove()方法;
3、解决方法:
List<String> list = new ArrayList<>(Arrays.asList(arr));
将数组通过Arrays.asList转化为List传入new ArrayList<>()里得到新的List, 然后用新的List进行add()、remove()操作。