Iteradores

Para recorrer colecciones podemos utilizar iteradores. Veamos un ejemplo:

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: 

ó

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. 

Como ves en el código anterior primero, hemos tenido que obtener el objeto Iterator asociado a la colección trians. 

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. 

Esta sentencia devuelve el objeto Triangulo que corresponde a la posición donde se encuentra el cursor de lectura. 

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. 

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.