【发布时间】:2019-02-27 06:37:18
【问题描述】:
我在一本书中看到以下陈述:
在基于写时复制的
Iterator或ListIterator上调用的任何变异方法(例如添加、设置或删除)都会抛出UnsupportedOperationException。
但是当我运行以下代码时,它工作得很好并且不会抛出UnsupportedOperationException。
List<Integer> list = new CopyOnWriteArrayList<>(Arrays.asList(4, 3, 52));
System.out.println("Before " + list);
for (Integer item : list) {
System.out.println(item + " ");
list.remove(item);
}
System.out.println("After " + list);
上面的代码给出以下结果:
Before [4, 3, 52]
4
3
52
After []
为什么我在使用remove 方法修改给定的list 时没有收到异常?
【问题讨论】:
-
你永远不会在 Iterator 或 ListIterator 上调用任何方法。
-
您在
CopyOnWriteArrayList上调用remove,而不是在您引用的文本中提到的迭代器上。它是UnsupportedOperationException,而不是UpsupportedOperationException。
标签: java collections concurrency iterator copyonwritearraylist