ArrayList
我得到一个concurrentModificationException,但正常的for循环.我没有任何例外.
在正常的forloop像: –
for(int i=0;istem.out.println(target.get(i));
target.add(22); //no exception
target.remove(2) // no exception
}
最佳答案
ForEach循环不会直接在您的集合上循环.它使用了你的集合的迭代器.您可以在集合实现中看到迭代器.
735
736 public Iteratorterator() {
737 return new Itr();
738 }
An optimized version of AbstractList.Itr
742
743 private class More ...Itr implements Iterator
你的foreach循环等于
for(Iteratorterator(); i.hasNext(); ) {
Integer element = i.next();
//To do
}
因此,如果您在此处执行任何操作,并且同时修改集合,则引擎盖下的迭代器会出现混淆并引发异常.
从JLS开始
List extends Integer> l = ...
for (float i : l) ...
将被翻译为:
for (Iteratorterator(); #i.hasNext(); ) {
float #i0 = (Integer)#i.next();
...