Изменение списка внутри итерации - PullRequest
0 голосов
/ 01 декабря 2010

Мы все знаем, что это незаконно и будет выдавать 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 's итератор next вызывается, ConcurrentModificationException нет.Но делает ли это законным?

1 Ответ

1 голос
/ 01 декабря 2010

Подумав еще немного, я пришел к выводу, что так и должно быть. «Решение» будет

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

Но с точки зрения того, как часто вызывается next, это точно так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...