Article image
Nicolas Langhi
Nicolas Langhi16/02/2023 15:29
Compartilhe

Iterator vs Foreach em Java

  • #Java

É comum, quando estamos aprendendo sobre Collections em Java, ficarmos em dúvida sobre a diferença de se utilizar iterator ou foreach ao navegar em loops pelos nossos objetos.

O que é?

Iterator

Iterator é uma interface fornecida pela framework collection para atravessar uma collection e para uma sequência de acessos de itens dentro da coleção (collection). É chamado de "Iterator" porque "iteração" é o termo técnico para looping.

for (Iterator i = c.iterator(); i.hasNext(); ) 
     System.out.println(i.next());

Foreach

O loop for-each serve para atravessar itens em uma collection.

 for (Element e: c)
     System.out.println(e);

Jeito mais moderno...

elements.forEach (e -> System.out.println(e) );

Olhando assim parece que é a mesma coisa, não é? Apenas estamos mostrando os itens das collections. Mas veja a diferença...

Diferença entre os dois

No loop for-each, não podemos modificar a collection, pois lançará uma ConcurrentModificationException. Isso ocorre porque o loop for-each cria implicitamente um iterator, mas ele não é exposto ao usuário. Daí não conseguimos modificar de fato os itens nas collections. Por outro lado, com o Iterator podemos modificar a collection. E modificar quer dizer simplesmente remover um elemento ou alterar o conteúdo de um item armazenado na coleção.

Conclusão

Quando usar cada um deles?

- Se tivermos que modificar a collection, usamos o Iterator.

- Se apenas queremos ver os itens, podemos usar o for-each. Também, ao usar loops aninhados (ou seja, loop dentro de outro loop) o melhor é utilizar o loop for-each.

Boas práticas de código para todos nós! Que a força do desenvolvimento esteja com você.

Referências:

Iterator vs Foreach em Java - GeeksforGeeks

Iterador Java (w3schools.com)

Compartilhe
Comentários (1)
Tennison Capra
Tennison Capra - 19/02/2023 16:02

Muito bem! Obrigado por deixar as referências!