image.png

Iteradores são objetos que permitem percorrer elementos de uma coleção de dados, como listas, sets, mapas e outras estruturas de dados. Eles fornecem uma maneira sequencial e sistemática de acessar cada elemento de uma coleção se expor sua implementação interna.

No Java, os iteradores fazem parte de Coleções e são implementados pela interface Iterator, que permite iterar sobre qualquer coleção que implemente a interface Collection.

Modelos da Interface Iterator

  1. hasNext(): Verifica se a iteração possui mais elementos e retorna true se houver mais elementos para serem percorridos, caso contrário retorna false.
  2. next(): Retorna o próximo elemento da iteração. Esse método avança o iterador para o próximo elemento.
  3. remove(): Remove o último elemento retornado pelo iterador da coleção subjacente. Esse método é opcional e pode gerar uma exceção do tipo UnsupportedOperationException se a coleção não suportar remoção.

E na prática, como funciona ?

Abaixo vamos usar um Iterator com ArrayList:

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

public class Main{
    public static void main(String[] args) {
        // Criando uma lista de nomes
        ArrayList<String> nomes = new ArrayList<>();
        nomes.add("Jorge");
        nomes.add("Maria");
        nomes.add("Carlos");

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

        // Usando o iterador para percorrer a lista
        System.out.println("Percorrendo a lista com um iterador:");
        while (iterador.hasNext()) {
            String nome = iterador.next();
            System.out.println(nome);
        }
    }
}
 /*
 Saída:
 Jorge
 Maria
 Carlos
 */

Explicação

Acima temos uma Lista para armazenar os nomes, chamada de nomes, nela adicionamos usando o método add() e passando os nomes por Strings. Com isso, temos a criação de um Iterator de nome iterador e damos e chamamos o método iterator() da lista nomes para obter um iterador. Esse iterador nos permitirá percorrer a lista.

Dentro de um loop while onde ele irá continuar rodando enquanto estiver elementos na lista, sendo verificado pelo hasNext(). Enquanto ele está em loop, é armazenado em uma variável do tipo String chamada nome o método next() do objeto Iterador, retornando o próximo elemento da lista e avança o iterador para o próximo item na sequência. Após isso, esse resultado é impresso na tela.

Iteradores com outras Coleções

Além de ArrayList, você pode usar iteradores com outras coleções, como Set e Map. Para Map, no entanto, o iterador precisa ser usado sobre as chaves( keySet() ), valores ( values() ) ou entradas ( entrySet() ), como no exemplo anterior.

Exemplo de Iterador com HashSet.