"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como evitar ConcurrentModificationException ao remover elementos de um ArrayList durante a iteração?

Como evitar ConcurrentModificationException ao remover elementos de um ArrayList durante a iteração?

Publicado em 2024-11-08
Navegar:847

How to Avoid ConcurrentModificationException When Removing Elements from an ArrayList During Iteration?

Como lidar com ConcurrentModificationException ao modificar um ArrayList durante a iteração

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:

Opção 1: Crie uma lista de valores para remover

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);

Opção 2: Use Iterator Remove

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.

Tutorial mais recente Mais>

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