Iterator em Java: Percorrendo Coleções

O Iterator é uma interface em Java que permite percorrer elementos em uma coleção de forma estruturada, permitindo acesso a cada item sequencialmente sem expor os detalhes internos da coleção. Ele é amplamente utilizado com as classes de coleção do pacote java.util, como ArrayList, LinkedList, HashSet e outras.

Conceito do Iterator

O Iterator simplifica a navegação por elementos em uma coleção e fornece três métodos principais:

  1. hasNext(): Verifica se há mais elementos na coleção a serem iterados.
  2. next(): Retorna o próximo elemento da coleção.
  3. remove(): Remove o último elemento retornado pelo iterator da coleção.

Esses métodos permitem manipular elementos durante a iteração, tornando-o útil para percorrer, modificar e filtrar coleções.

Como Usar o Iterator

Para demonstrar o uso do Iterator, vamos ver um exemplo com uma lista de elementos:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ExemploIterator {
    public static void main(String[] args) {
        List<String> nomes = new ArrayList<>();
        nomes.add("Ana");
        nomes.add("Bruno");
        nomes.add("Carlos");
        nomes.add("Diana");

        // Criando o Iterator
        Iterator<String> iterator = nomes.iterator();

        // Percorrendo a coleção usando o Iterator
        System.out.println("Percorrendo a lista de nomes:");
        while (iterator.hasNext()) {
            String nome = iterator.next();
            System.out.println(nome);
        }
    }
}

Saída Esperada

Percorrendo a lista de nomes:
Ana
Bruno
Carlos
Diana

Neste exemplo, usamos o hasNext() para verificar se há elementos restantes na lista e next() para acessar cada elemento. Esse método é muito eficiente para listas e coleções de grandes tamanhos.

Modificando a Coleção Durante a Iteração

Um dos pontos fortes do Iterator é a capacidade de remover elementos durante a iteração sem provocar erros de modificação concorrente. Veja como podemos remover elementos específicos:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class RemoverElementos {
    public static void main(String[] args) {
        List<String> nomes = new ArrayList<>();
        nomes.add("Ana");
        nomes.add("Bruno");
        nomes.add("Carlos");
        nomes.add("Diana");

        Iterator<String> iterator = nomes.iterator();

        // Removendo o nome "Carlos" durante a iteração
        while (iterator.hasNext()) {
            String nome = iterator.next();
            if ("Carlos".equals(nome)) {
                iterator.remove();
            }
        }

        System.out.println("Lista após remoção de 'Carlos': " + nomes);
    }
}

Saída Esperada

Lista após remoção de 'Carlos': [Ana, Bruno, Diana]

O método remove() do Iterator permite a remoção segura de elementos durante a iteração, evitando exceções de modificação da coleção.

For-each vs. Iterator

O laço for-each simplifica a iteração e é uma ótima opção para percorrer coleções quando não há necessidade de modificar a coleção. No entanto, ele não permite a remoção de elementos durante a iteração, diferentemente do Iterator. Abaixo, vemos a diferença entre os dois métodos:

Exemplo de for-each

for (String nome : nomes) {
    System.out.println(nome);
}

Exemplo com Iterator

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

Conclusão

O Iterator em Java oferece uma maneira poderosa de percorrer coleções com flexibilidade, especialmente para remover elementos de maneira segura durante a iteração. Ele é essencial para manipular coleções de forma eficiente e controlar o processo de iteração de acordo com as necessidades específicas do código.


Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *