Aprender sobre la existencia de las colecciones como listas y conjuntos en Java nos abre las puertas a un mundo completamente nuevo y maravilloso, no obstante, en ocasiones se hace un poco complejo entender cómo funcionan. Podríamos decir que las colecciones necesitan ser recorridas de algún modo, esta es precisamente la función de un iterator en Java, una herramienta que nos permite acceder a elementos de una colección sin tener que saber sus detalles internos. Si bien Java ofrece maneras más modernas de abordar este problema, como los bucles forEach, el iterator en Java sigue siendo una opción, en especial si necesitas eliminar o modificar elementos mientras los recorres.
Veamos en qué consiste el iterator en Java, cómo usarlo y en qué situaciones es mejor que el forEach.
¿Qué es un iterator en Java?
El iterator en Java es una interfaz que proporciona una forma uniforme de recorrer elementos en una colección, independientemente de su tipo (ya sea una lista, conjunto o mapa). Lo que hace especial al java iterator es su capacidad para eliminar elementos de manera segura mientras se recorren, lo cual es una limitación en otros métodos como el bucle forEach
.
Métodos clave del iterator
El iterator en Java está fundamentado principalmente en tres métodos:
hasNext()
: Devuelvetrue
si hay más elementos por recorrer en la colección.next()
: Devuelve el siguiente elemento de la colección.remove()
: Elimina el último elemento devuelto pornext()
.
Veamos cómo usar esos métodos para recorrer una lista:
List<String> nombres = new ArrayList<>();
nombres.add("Pedro");
nombres.add("Ana");
nombres.add("Juan");
Iterator<String> it = nombres.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
Este código imprimirá los nombres almacenados en la lista uno a uno. El uso de hasNext()
asegura que el ciclo solo continúe mientras haya elementos en la lista.
¿Cuándo usar un iterator en Java?
Aunque Java ha introducido formas más sencillas de iterar sobre colecciones (como forEach
), el iterator en Java sigue siendo útil en ciertos casos. Veamos cuáles:
Eliminar elementos de una lista
Una de las limitaciones del bucle forEach
es que no te permite eliminar elementos mientras recorres la lista, lo que podría lanzar una excepción. Sin embargo, el java iterator tiene un método remove()
, que hace posible eliminar elementos durante la iteración.
Por ejemplo, si quieres eliminar todos los elementos que contienen la palabra “Pedro”:
Iterator<String> it = nombres.iterator();
while (it.hasNext()) {
String nombre = it.next();
if (nombre.equals("Pedro")) {
it.remove();
}
}
Este código eliminará todos los nombres que sean “Pedro” sin causar errores.
El iterator en Java también puede ser utilizado cuando se trabaja con estructuras de datos más complejas, como árboles o grafos, donde necesitas un control preciso sobre el recorrido.
Comparación entre el iterator y el bucle forEach
Con la llegada de Java 5, también se introdujo el bucle forEach
, que permite recorrer una lista de manera más compacta y legible. Veamos un ejemplo con el mismo conjunto de nombres:
for (String nombre : nombres) {
System.out.println(nombre);
}
El bucle forEach
es más conciso y fácil de entender, lo que lo convierte en la opción preferida en la mayoría de los casos. Sin embargo, no permite eliminar o modificar la lista durante el recorrido, algo que el iterator en Java hace sin problemas.
¿Cuál es mejor?
Depende de la situación. Si solo necesitas recorrer la lista y no tienes la intención de modificarla, el bucle forEach
es la mejor opción por su simplicidad. Pero si necesitas modificar o eliminar elementos mientras iteras, el iterator en Java es la opción adecuada.
Ahora que sabes la diferencia entre el iterator en Java y el forEach, puedes seguir aprendiendo sobre otras temáticas avanzadas de Java. Para ello tenemos el curso Java, un bootcamp en el que aprenderás sobre temáticas variadas y que te permitirá incursionar rápidamente en el mercado tech, conocido por sus excelentes expectativas salariales. ¡Sigue aprendiendo y mejora tu futuro con Keepcoding!