Para recorrer colecciones podemos utilizar iteradores. Veamos un ejemplo:
|
1 2 3 4 5 |
List<Student> list = new ArrayList<Student>(); Iterator<Student> elements = list.iterator(); while(elements.hasNext()){ System.out.print(elements.next()) } |

Todas las clases que implementan la interfaz Collectiontambién implementan indirectamente la interfaz Iterable, lo que convierte a sus objetos en colecciones de elementos iterables, es decir, que se pueden recorrer secuencialmente.
Anteriormente cuando vimos como recorrer las colecciones ya has iterado de la siguiente forma:
|
1 2 3 |
for (int i=0; i<trians.size(); i++) { System.out.println(trians.get(i).verTipo()); } |
ó
|
1 2 3 |
for (Object t : trians) { // Bloque de sentencias } |
El bucle se ejecuta tantas veces como elementos tenga la colección trians. En cada iteración guardará el elemento correspondiente en la variable t.
Pero hay más formas de iterar, presta atención:
Iterar con el método iterator()
El método iterator() retorna un objeto de la clase Iterator que provee de un mecanismo para recorrer secuencialmente los elementos de una colección a través de un cursor. Llamamos cursor a una marca que se va desplazando y que va posicionándose en el siguiente elemento a leer dentro de la colección.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.ArrayList; import java.util.Iterator; public class Principal { public static void main(String[] args) { ArrayList<Triangulo> trians = new ArrayList<Triangulo>(); trians.add(new Triangulo(1, 2, 3)); trians.add(new Triangulo(1, 1, 2)); trians.add(new Triangulo(1, 1, 1)); Iterator<Triangulo> itera = trians.iterator(); Triangulo cadaTriangulo; while (itera.hasNext()) { cadaTriangulo = itera.next(); System.out.println(cadaTriangulo.verTipo()); } } } |
Como ves en el código anterior primero, hemos tenido que obtener el objeto Iterator asociado a la colección trians.
|
1 |
Iterator<Triangulo> itera = trians.iterator(); |
Nuestro nuevo objeto Iterator se llama itera y estamos utilizándolo para acceder secuencialmente a los elementos de la colección trians, de manera similar a como se recorren los registros de un fichero secuencial. Para lograrlo utilizamos los siguientse métodos de la clase Iterator:
- boolean hasNext() Esta función devuelve true mientras sigan quedando elementos para iterar en la colección. En el ejemplo lo estamos utilizando para ejecutar el bucle mientras haya más elementos que recorrer.
- Object next() Devuelve el siguiente elemento de la colección.
|
1 |
CadaTriangulo = itera.next(); |
Esta sentencia devuelve el objeto Triangulo que corresponde a la posición donde se encuentra el cursor de lectura.
|
1 2 3 4 |
while (itera.hasNext()) { cadaTriangulo = itera.next(); System.out.println(cadaTriangulo.verTipo()); } |
La expresión Itera.hastNext() devuelve el valor true si el puntero no se encuentra al final de la colección, es decir, si todavía hay elementos que leer. La estructura while nos está permitiendo acceder secuencialmente a cada elemento mientras queden más elementos para leer.
Iterando con mapas
Las colecciones de tipo Map no descienden de Iterable, luego es fácil deducir que no son colecciones iterables. No podemos hacer ninguna de estas operaciones con nuestro objeto nombres:
Sin embargo, hay una solución. Las clases que implementan la interfaz Map tienen un par de métodos que vienen a salvarnos de esta situación:
- objMap.keySet(); // Devuelve un objeto de tipo Set con las claves.
- objMap.values(); // Devuelve un objeto de tipo Set con los valores, sin las claves.
|
1 2 3 4 5 |
//Recorrer el mapa Set<String> claves = nombres.keySet(); for (String key : claves) { System.out.println(key + " - " + nombres.get(key)); } |
Los objetos devueltos por estos métodos sí son iterables, ya que son conjuntos.
RECUERDA QUE…
- Las colecciones es la forma de poder almacenar varios objetos de forma dinámica
- Podemos ordenar los objetos de una colección con las interfaces: Comparable y Comparator.
- Los tipos genéricos ayudan a comprobar el tipo de los objetos agregados en una colección en tiempo de compilación.