我们都知道这是非法的,会抛出ConcurrentModificationException
:
for (Item i : theList) {
if (i.num == 123)
foo(i); // foo modifies theList
}
但是这个怎么样?
for (Item i : theList) {
if (i.num == 123) {
foo(i); // foo modifies theList
break;
}
}
因为在调用theLists
的迭代器next
之前循环被破坏,所以没有ConcurrentModificationException
。但这是否合法?
答案 0 :(得分:1)
在考虑了一些之后,我得出结论,必须这样做。 “解决方案”将是
for (Item i : theList) {
if (i.num == 123) {
theI = i;
break;
}
}
foo(theI); // foo modifies theList
但就调用next
的频率而言,这是完全相同的。