2017-08-26 77 views
0

我们可以在迭代的时候去掉ArrayList中的操作然后迭代时为什么我们不能做同样的操作CopyOnWriteArrayList?为什么迭代时我们无法将元素移除到CopyOnWriteArrayList?

为什么在此过程中发生UnsupportedOperationException?

+0

请显示您遇到问题的确切代码,并发布异常堆栈跟踪 –

+2

因为:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6 -b14/java/util/concurrent/CopyOnWriteArrayList.java#1036 – 2017-08-26 19:45:51

+2

和*为什么是*可能是类似于以下原因的:https://stackoverflow.com/a/28112444/180100 – 2017-08-26 19:50:11

回答

1

CopyOnWriteArrayList所有存取器(添加,删除等)都只是创造新的阵列和iterator()刚刚创建的阵列的快照的Iterator排除干扰的可能性,文档:

“快照”样式迭代器方法在创建迭代器的位置使用对数组状态的引用 。这个数组永远不会在迭代器的生命周期中发生变化 ,所以干扰是 不可能的,迭代器保证不会抛出 ConcurrentModificationException。

相关问题