问题情形:
使用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的元素进行修改也是可以的。
-------------------------------