estou com um problema. Tenho um conjunto de objectos numa lista. Estou a iterá-la. Durante o processo do iterador eu tenho que adicionar mais elementos à lista. Dá-me uma mensagem excepção “java.util.ConcurrentModificationException”.
Qual é a solução para este problema i.e., como é que posso percorrer uma lista, adicionando ou removendo se quiser novos elementos à lista sem dar erro?
Você não pode percorrer uma lista (através do Iterator) e tentar modifica-la. Nesse caso, a melhor solução como o colega já citou, é usar uma lista Auxiliar
lelodois
posta seu código ai!!!
ViniGodoy
Há duas soluções para o seu problema:
Usar o ListIterator (para remover, pode ser só o iterator padrão).
ListIterator<SuaClasse>it=lista.listIterator();while(it.hasNext()){
SuaClasseobj=it.next();if(devoRemover(obj)){
it.remove(); //Ok, esse remove apaga o objeto sem ConcurrentModificationException}
}
Aí vc percorre a cópia e trabalha na lista original.
Geralmente, a primeira opção é a mais fácil para remoção. A segunda opção quebra um galho em diversos casos, principalmente quando a operação na lista será feita através de outro método, cujo comportamento é complexo e poderá mudar no futuro.