Перед тем, как ваши глаза оглянутся на еще один вопрос ConcurrentModificationException, это не ваш типичный вопрос ConcurrentModificationException.Не изменять список, но все равно получить ConcurrentModificationException
Я понимаю ConcurrentModificationExceptions, но я не понимаю, почему я получаю его в следующем коде. В «for» ниже показано, что итератор продолжает жить вне цикла for. (С помощью отладчика в затмении, я могу видеть, что итератор сохраняет свое значение modCount JList, когда цикл будет перезапущен.)
public class ForEachTest {
public static void main(String[] args) {
List<Integer> zList = new LinkedList<Integer>();
List<Integer> jList = new LinkedList<Integer>();
jList.add(1);
while (true) {
for (Integer j : jList) {
zList.add(17);
System.out.println(j);
}
jList = zList;
}
}
}
Сначала я думал, что это может быть проблемой синтаксического сахара, но я переписал его с помощью явный итератор и столкнулся с тем же поведением.
Наконец, я смог переписать его, разделив это на некоторое время с помощью отдельного шага инициализации, поэтому я не ищу переписывание, чтобы заставить его работать. Но я хотел бы знать, в чем проблема, как это показано здесь. Я предпочел бы использовать синтаксис for-each, если это возможно.
Обратите внимание, что мой ответ объясняет, почему это происходит (это * ваш * типичный вопрос ConcurrentModificationException, в основном), но вы не объяснили, что вы пытаетесь сделать, поэтому я не смог предложить альтернативу. –