【发布时间】:2017-09-24 13:42:36
【问题描述】:
我在很多地方都看到,在迭代时从 ArrayList 中删除元素时,我应该使用迭代器删除方法而不是集合删除方法以避免并发修改异常。
但是,下面的代码使用 Java 1.8 Collection remove 可以正常工作,而不会给出并发修改异常。可以看到我这里没有使用迭代器来移除对象。
List<MyObject> list = new ArrayList<MyObject>();
list.add(new MyObject());
list.add(new MyObject());
list.add(new MyObject());
for (int i=0; i<list.size(); i++) {
list.remove(i);
}
【问题讨论】:
-
并发修改异常是在尽力而为的基础上抛出的,你的程序不能总是期望它在发生时抛出
-
你是幸运的,或者实际上是不幸的......你决定。
-
你为什么认为
ConcurrentModificationException会被抛出? -
如果您想知道为什么它没有做您期望的事情,请检查您正在调用的所有方法的 Javadoc。
标签: java arraylist collections concurrentmodification