Ao iterar por meio de um ArrayList, a tentativa de remover elementos durante a iteração pode resultar em um java.util.ConcurrentModificationException . Isso ocorre devido ao mecanismo fail-fast do ArrayList, que detecta quaisquer alterações na estrutura da lista durante a iteração e lança a exceção para evitar resultados inesperados.
Para resolver esse problema, há duas abordagens principais a serem consideradas:
Essa abordagem envolve identificar os elementos a serem removidos dentro do loop e adicioná-los a uma lista separada. Assim que a iteração for concluída, remova todos os elementos da lista original usando o método removeAll().
ArrayList valuesToRemove = new ArrayList();
for (A a : abc) {
if (a.shouldBeRemoved()) {
valuesToRemove.add(a);
}
}
abc.removeAll(valuesToRemove);
Como alternativa, você pode utilizar o método remove() do próprio iterador. No entanto, observe que essa abordagem requer o uso do loop for tradicional em vez do loop for aprimorado.
for (Iterator iterator = abc.iterator(); iterator.hasNext();) {
A a = iterator.next();
if (a.shouldBeRemoved()) {
iterator.remove();
}
}
Ao implementar uma dessas abordagens, você pode evitar a ConcurrentModificationException enquanto modifica efetivamente seu ArrayList durante a iteração.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3