Saltar al contenido principal

Interfaz Iterable

La interfaz Iterable<T> en Java es una interfaz tipada fundamental que permite que los objetos de una clase sean recorridos o iterados de manera secuencial. Prácticamente, todas las colecciones en Java (como listas, conjuntos, mapas, etc.) implementan esta interfaz, lo que facilita su iteración mediante un for-each loop o un iterator explícito.

La interfaz Iterable<T> define un único método importante:

public interface Iterable<T> {
Iterator<T> iterator();
}

La interfaz Iterable es genérica, lo que significa que puede ser usada para cualquier tipo de objeto. El tipo T representa el tipo de elemento que se almacenará en la colección. El método iterator() devuelve un objeto de tipo Iterator<T>, que es un iterador que permite recorrer los elementos de la colección de manera secuencial.

La interfaz Iterable proporciona la funcionalidad básica de iteración. Un objeto que implemente Iterable puede ser recorrido utilizando un Iterator, o si es una colección de Java, puede ser recorrido fácilmente utilizando un for-each loop. El código de iteración con un for sería así:

// iterable es un objeto de una clase que implementa la interfaz Iterable
iterable = ...

// Usando el for-each loop (método simplificado de iterar sobre los elementos)
for (String item : iterable) {
System.out.println(item);
}

Internamente, el for-each loop llama al método iterator() de la interfaz Iterable para obtener un Iterator y luego usa ese Iterator para recorrer los elementos.

La interfaz Iterator<E> define los siguientes métodos:

  • hasNext(): Retorna true si hay más elementos en la colección que se pueden recorrer, y false si no.
  • next(): Retorna el siguiente elemento en la colección y avanza el iterador al siguiente elemento.
  • remove(): Elimina el último elemento retornado por el next(). Este método no está implementado en todos los iteradores, pero puede ser usado si la implementación lo permite.

La interfaz Iterable hace que cualquier objeto que la implemente sea compatible con el for-each loop, proporcionando una manera estándar de recorrer elementos de una colección como, por ejemplo, la clase ArrayList. También facilita la compatibilidad con otras APIs y estructuras de datos que utilizan Iterator para recorrer objetos.