问题情形:
使用List<Integer> temp = Arrays.asList(1,2,3,4,5);
Iterator<Integer> it = temp.iterator();
while(it.hasNext()){
System.out.println(it.next());
it.remove();
}
结果: 编辑时不报错,但是执行时报错!
Exception in thread "main" java.lang.UnsupportedOperationException
原因: Arrays.asList方法返回的ArrayList是继承自AbstractList同时实现
了RandomAccess和Serializable接口,定义如下:
AbstractList这个类的定义:
这时我们发现AbstractList这个类的set add remove方法定义如下:
List<Integer> temp = Arrays.asList(1,2,3,4,5);
temp.set(3, 6);
List<Integer> list = new ArrayList<Integer>(temp);
这样就可以在list中进行add() 和remove()的操作;
有些同学认为是temp是只读的,但是使用set();方法对指向index的元素进行修改也是可以的。
-------------------------------
本文解析了使用Arrays.asList创建集合时的常见错误及原因,并提供了解决方案,避免UnsupportedOperationException异常。
3443

被折叠的 条评论
为什么被折叠?



