Итерация, concurrentModifcationException в Java - PullRequest
1 голос
/ 20 июля 2010

Я использую расширенный цикл for для ArrayList и хотел удалить некоторые элементы, содержащие определенное значение.

Когда я пытаюсь сделать это, я получаю вышеупомянутое исключение. Я осмотрелся вокруг, и кажется, что использование расширенного цикла for при изменении коллекции - плохая идея. Как еще я могу пойти по этому поводу?

спасибо за любую помощь.

Ответы [ 3 ]

4 голосов
/ 20 июля 2010

Вы можете сохранить список элементов, которые нужно удалить, а затем вызвать removeAll после завершения цикла.

Vector toRemove=new Vector();
for (Object o: array){
  if(remove(o))  toRemove.add(o);
}
array.removeAll(o);
3 голосов
/ 20 июля 2010

Вы должны получить итератор для коллекции, пройтись по нему и вызвать метод remove () на итераторе, когда хотите удалить элемент. Обратите внимание, что не все реализации Iterator поддерживают remove (), это необязательный метод!

for(Iterator it = collection.iterator(); it.hasNext();) {
  Object element = it.next();
  if(.. should remove element ..)
    it.remove()
}
1 голос
/ 20 июля 2010

Для этого нельзя использовать расширенный цикл for, поскольку у вас нет доступа к используемому Iterator. Вам нужно использовать обычный цикл for и удалять элементы из ArrayList через Iterator.remove().

...