Iteradores#
Patrón Iterador#
Cada colección es Iterable. Puede obtener su objeto Iterator para recorrer todos los elementos de la colección.
El patrón iterador permite recorrer una colección de elementos sin exponer su representación interna. Proporciona una manera de acceder secuencialmente a los elementos de una colección.
Clases en el Patrón Iterador#
Iterador: Define una interfaz para acceder y recorrer los elementos de una colección.
Agregado: Define una interfaz para crear un iterador asociado a su colección.
Implementaciones Concretas#
Iterador-Concreto: Implementa la interfaz
Iterador
para recorrer una colección específica.Agregado-Concreto: Implementa la interfaz
Agregado
y devuelve una instancia de su iterador asociado.
Ejemplo de un iterador y agregado en Java:
import java.util.ArrayList;
import java.util.Iterator;
class ColeccionNumeros implements Iterable<Integer> {
private ArrayList<Integer> numeros = new ArrayList<>();
public void agregarNumero(int numero) {
numeros.add(numero);
}
@Override
public Iterator<Integer> iterator() {
return numeros.iterator();
}
}
public class Main {
public static void main(String[] args) {
ColeccionNumeros coleccion = new ColeccionNumeros();
coleccion.agregarNumero(1);
coleccion.agregarNumero(2);
coleccion.agregarNumero(3);
for (int numero : coleccion) {
System.out.println(numero);
}
}
}
En este ejemplo, ColeccionNumeros
implementa la interfaz Iterable
, lo que permite que se pueda iterar usando un for-each
.
// Probar los códigos aquí

Figura 7 Here is my figure caption!#
import java.util.*;
public class TestIterator {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("New York");
collection.add("Atlanta");
collection.add("Dallas");
collection.add("Madison");
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next().toUpperCase() + " ");
}
System.out.println();
}
}
// Probar el código aquí
Iteraciones sobre Arreglos#
Las iteraciones sobre arreglos en Java pueden realizarse mediante estructuras de control como for
, while
, o bien usando los iteradores.
Ejemplo de iteración sobre un arreglo:
public class IteracionArreglos {
public static void main(String[] args) {
int[] numeros = {1, 2, 3, 4, 5};
// Iteración usando un bucle for
for (int i = 0; i < numeros.length; i++) {
System.out.println("Número: " + numeros[i]);
}
// Iteración usando for-each
for (int numero : numeros) {
System.out.println("Número: " + numero);
}
}
}
// Probar los códigos aquí
Iteraciones sobre Matrices#
Las matrices o arreglos bidimensionales también pueden ser iterados utilizando bucles anidados.
Ejemplo de iteración sobre una matriz:
public class IteracionMatrices {
public static void main(String[] args) {
int[][] matriz = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Iteración sobre una matriz
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz[i].length; j++) {
System.out.println("Elemento en [" + i + "][" + j + "]: " + matriz[i][j]);
}
}
}
}
En este código, la primera iteración recorre las filas de la matriz y la segunda recorre las columnas de cada fila.
// Probar los códigos aquí
Conclusión#
El uso de genéricos, interfaces e iteradores es fundamental en la programación orientada a objetos en Java, permitiendo crear soluciones más flexibles, reutilizables y mantenibles. El patrón iterador, en particular, facilita la navegación por colecciones sin exponer su implementación interna. Estas herramientas son esenciales para gestionar la complejidad en programas más grandes y modulares.