Saltar al contenido principal

Iterator

El patrón Iterator es un patrón de diseño de comportamiento que se usa para acceder secuencialmente a los elementos de una colección (como una lista, conjunto o mapa) sin exponer los detalles internos de su implementación.

El patrón define un objeto denominado iterator que permite recorrer los elementos de una colección uno a uno. La ventaja es que el acceso es independiente de la estructura interna de la colección.

Componentes del patrón Iterator

Los componentes del patrón Iterator son:

  • Iterador (Iterator): Define la interfaz para acceder a los elementos de una colección. Normalmente incluye métodos como:
    • hasNext(): Comprueba si hay más elementos por iterar.
    • next(): Devuelve el siguiente elemento de la colección.
  • Colección: Define una interfaz para obtener un iterator. La colección delega en el iterador la responsabilidad de recorrer sus elementos.
  • Iterador concreto: Implementa la interfaz del iterador. Gestiona la posición actual de la iteración y devuelve los elementos cuando se le solicita.
  • Colección concreta: Implementa la interfaz de la colección y proporciona el iterador.

En Java tenemos ya implementado dicho patrón:

  • ArrayList implementa una interfaz llamada Iterable que contiene el método iterator() que devuelve un iterador.
  • El iterador permite recorrer los elementos sin necesidad de conocer cómo está implementada internamente la lista.
  • Usamos hasNext() para comprobar si hay más elementos y next() para acceder a ellos.
import java.util.Iterator;
import java.util.ArrayList;

public class EjemploIterator {
public static void main(String[] args) {
// Crear una colección (un ArrayList)
ArrayList<String> lista = new ArrayList<>();
lista.add("Elemento 1");
lista.add("Elemento 2");
lista.add("Elemento 3");

// Obtener el iterador de la colección
Iterator<String> iterador = lista.iterator();

// Recorrer la colección usando el iterador
while (iterador.hasNext()) {
String elemento = iterador.next();
System.out.println(elemento);
}
}
}