修改迭代内的列表

时间:2010-12-01 11:28:49

标签: java collections iterator concurrentmodification

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

1 个答案:

答案 0 :(得分:1)

在考虑了一些之后,我得出结论,必须这样做。 “解决方案”将是

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

但就调用next的频率而言,这是完全相同的。