0

我们都知道这是非法的,并且会抛出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. 但这是否使其合法?

4

1 回答 1

1

再想一想,我得出的结论是,必须如此。“解决方案”将是

for (Item i : theList) {
 if (i.num == 123) {
  theI = i;
  break;
 }
}
foo(theI);  // foo modifies theList

但就next调用频率而言,这完全一样。

于 2010-12-01T11:31:05.700 回答