4
respostas

Ocorreu exception ao executar

Exception in thread "main" java.util.ConcurrentModificationException at java.util.LinkedList$ListItr.checkForComodification(Unknown Source) at java.util.LinkedList$ListItr.next(Unknown Source) at TestandoIterator.main(TestandoIterator.java:20)

4 respostas

Olá REGINA MEGUMI, poderia por favor passa a classe que lança a Exception (TestandoIterator.java)!

public class TestandoIterator {
    public static void main(String[] args) {

        List<String> letras = new LinkedList<>();
        Iterator<String> it = letras.iterator();        

        letras.add("A");
        letras.add("B");
        letras.add("C");

        while (it.hasNext()) {
            System.out.println(it.next());
        }


    }
}

Olá Regina.

Se ainda estiver enfrentando esse problema, faça a declaração do Iterator somente após a chamada dos métodos "add()" em "letras".

Segue artigo que explica o motivo da ocorrência dessa Exception: http://blog.caelum.com.br/concurrentmodificationexception-e-os-fail-fast-iterators/

Segue abaixo código modificado:

public class TestandoIterator {
    public static void main(String[] args) {
        List<String> letras = new LinkedList<>();        
        letras.add("A");
        letras.add("B");
        letras.add("C");

        Iterator<String> it = letras.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

Se você "pega" o iterator da lista com ela vazia o iterator não tem nenhum item logo não é possível pegar elementos, como foi falado no vídeo caso você já tenha percorrido todos os itens da lista, é necessário criar um novo iterator pois o mesmo já percorreu todos os itens da lista. No seu caso o Iterator está sendo criado com a lista vazia logo o mesmo só reconhece a lista como vazia, se criar ele depois de add os itens ele irá ver quais itens foram add. Faça o teste : Crie um Iterator após add 3 itens na lista, após percorrer a lista imprimindo os itens, add mais itens e veja que se usar o mesmo iterator ele irá apontar o mesmo erro, pois aquele iterador só encherga os itens existentes de quando ele foi criado.