记一次Arrays.asList集合删除的错误
关键字:可变ArrayList和 不可变ArrayList
在项目中使用了从一个集合中删除另外一个集合中的元素,报异常。
List<String> order = Arrays.asList("a","b","c");
order.removeAll(Arrays.asList("a"));
错误提示:
Exception in thread "main" java.lang.UnsupportedOperationExceptionat java.util.AbstractList.remove(AbstractList.java:161)at java.util.AbstractList$Itr.remove(AbstractList.java:374)at java.util.AbstractCollection.removeAll(AbstractCollection.java:376)at com.qihoo.finance.weloan.absm.facade.SampleOrderConvertFacadeImpl.main(SampleOrderConvertFacadeImpl.java:322)
原因是 Arrays.asList返回的是 new ArrayList<>(a),这个ArrayList类是Arrays类中的静态内部类java.util.Arrays.ArrayList。该类只能索引、遍历、查询。不能添加或者删除。注意要区别java.util.ArrayList类。
图-1 java.util.Arrays.ArrayList
源代码分析:
java.util.Arrays.ArrayList的remove方法直接继承自AbstractList,没有任何操作直接抛出UnsupportedOperationException。
如果想将数组转为可变list推荐使用
Arrays.stream(array).collect(Collectors.toList())
new ArrayList<>(Arrays.asList(...))