Introducción a Iterator en Java

Un iterador es una interfaz que se utiliza para recuperar elementos uno por uno en una colección. Está disponible en el paquete Java llamado Java. paquete util. La API de recopilación implementa el método iterator () y, por lo tanto, los datos se pueden recuperar de interfaces como Map, List, Queue, Deque y Set, que se implementan desde el marco de recopilación. Como su nombre indica, un iterador en Java itera a través de una colección de objetos.

Sintaxis:

Iterator iterator()

Debajo del iterador está el nombre de un objeto creado al llamar al método iterator () de la interfaz de recopilación. "Colección" es el nombre del objeto de colección.

Iterator iter = collection.iterator();

Métodos de iterador en Java

Los iteradores tienen 4 métodos en Java que se utilizan para atravesar colecciones y recuperar la información requerida. Son los siguientes:

  • hasNext (): este es un método que devuelve boolean true si la iteración tiene un siguiente elemento presente y boolean false si no hay ningún elemento presente a continuación.
  • next (): este método devuelve el valor del elemento presente en la próxima iteración. Supongamos que no hay elementos que se devolverán en la próxima iteración y luego se lanza una "NoSuchElementException".
  • remove (): este método elimina el elemento actual devuelto por el iterador de la colección. En caso de que este método se llame anterior al método next (), arroja "IllegalStateException".
  • forEachRemaining (): este método ejecuta la operación en todos los elementos restantes de la colección hasta que todos hayan sido procesados ​​o hasta que se produzca una excepción. Además, este es un método recientemente introducido por Oracle Corporation en su lanzamiento de Java SE 8.

Ejemplo de iterador en Java

A continuación se muestra el ejemplo de Iterator en Java:

Código:

import java.io.*;
import java.util.*;
public class IteratorExample (
public static void main(String() args)
(
ArrayList val = new ArrayList();
val.add("Iteration started");
val.add("Printing iteration1");
val.add("Printing iteration2");
val.add("Printing iteration3");
val.add("End of iteration");
// Iterates through the list
Iterator iter = val.iterator();
System.out.println("The values of iteration are as follows: ");
while (iter.hasNext())
System.out.println(iter.next() + " ");
System.out.println();
)
)

Salida:

Excepciones lanzadas por los métodos de iterador

En una lista de elementos, un iterador puede obtener información solo de los elementos existentes. Se bloqueará o lanzará una excepción si se intenta acceder a un elemento que no está presente en la próxima iteración. Aquí conoceremos los diferentes tipos de excepciones que obtenemos al implementar los métodos iteradores.

1. método next ()

Al iterar a través de un conjunto de elementos y buscarlos mediante este método, puede ocurrir la siguiente excepción.

  • NoSuchElementException: esto ocurre si next () intenta recuperar un elemento que no existe en la lista actual. Por lo tanto, siempre se debe usar un hasNext () antes de llamar a next ().

2. método remove ()

Hay 2 tipos de excepciones que pueden ocurrir aquí:

  • IllegalStateException: si se llama al método remove () antes que al método next (), se genera esta excepción. Esto se debe a que el método intenta eliminar un elemento que aún no está especificado por el método next () y, por lo tanto, falla. Para resolver esta excepción, se debe llamar a next () para referirse al primer elemento y luego se puede llamar a remove () para eliminar el mismo de la lista.
  • UnsupportedOperationException: esta excepción generalmente se produce cuando se intenta modificar un objeto de lista agregando o quitando una operación que no admite modificaciones. Por ejemplo, cuando Arrays.asList intenta convertir una matriz en una lista, lanza esta excepción. Esto se debe a que el objeto Lista tendrá un tamaño fijo, ya que es creado por el contenedor de ArrayList y, por lo tanto, no se permitirá la modificación. Para resolver este problema, convierta el objeto Arrays.asList en ArrayList o LinkedList antes de realizar operaciones como agregar / quitar en el mismo.

Sintaxis:

//ArrayList is created from the list having fixed size
list = new ArrayList(list);
Iterator iter = list.iterator();
while(iter.hasNext())(
if( iter.next().equals("First iteration") )(
iter.remove();
)
)

Métodos de ListIterator

Estos métodos permiten que el iterador recorra ambas direcciones del objeto de colección. Los siguientes son algunos de ellos:

  • add (): este método inserta el valor del objeto dado y se devuelve cuando se llama al método next ().
  • hasNext (): este método es el mismo que el mencionado en los tipos de iterador que devuelve Boolean verdadero / falso dependiendo del siguiente elemento que tenga un valor o no.
  • hasPrevious (): este método es opuesto a hasNext () y devuelve Boolean true si la lista tiene un elemento anterior y viceversa.
  • next (): este método recupera el siguiente elemento de la lista dada.
  • previous (): este método recupera el elemento anterior de la lista.
  • remove (): Esto elimina el elemento presente de la lista. Cuando se llama a este método antes de la función next () o previous (), arroja "IllegalStateException".

Ejemplo para ListIterator

A continuación se muestra un ejemplo en ArrayList para ListIterator.

Código:

import java.util.*;
public class IteratorExample (
public static void main(String args()) (
// Creating an array list
ArrayList array = new ArrayList();
// add elements to the array list
array.add("First element");
array.add("Second element");
array.add("Third element");
array.add("Fourth element");
array.add("Fifth element");
array.add("Sixth element");
// Displaying elements of an array
System.out.println("Printing input of the array: ");
Iterator iter = array.iterator();
while(iter.hasNext()) (
Object value = iter.next();
System.out.println(value + " ");
)
System.out.println();
// To update the elements of iteration
ListIterator listiter = array.listIterator();
while(listiter.hasNext()) (
Object value = listiter.next();
listiter.set(value + "+");
)
System.out.print("Updated array elements are as follows: ");
iter = array.iterator();
while(iter.hasNext()) (
Object value = iter.next();
System.out.print(value + " ");
)
System.out.println("\n");
// To display the contents in backward direction
System.out.println("Printing elements in backward direction: ");
while(listiter.hasPrevious()) (
Object value = listiter.previous();
System.out.print(value + " ");
)
System.out.println();
)
)

Salida:

Ventajas de los iteradores en Java

A continuación se presentan las ventajas de los iteradores:

  1. Es compatible con todas las clases en la interfaz de la Colección.
  2. Los métodos de un iterador son bastante simples y fáciles de entender e implementar.
  3. Los elementos de una colección se pueden modificar fácilmente (agregar / eliminar) utilizando iteradores.
  4. Acceder a elementos a través de iteradores no dará lugar a excepciones en tiempo de ejecución.
  5. El manejo de datos es eficiente.
  6. Puede iterar sobre varias variables simultáneamente manteniendo el estado de iteración de cada variable por separado.

Limitaciones de iteradores en Java

A continuación se detallan las limitaciones de los iteradores:

  1. El iterador de Java solo puede iterar en una dirección, es decir, hacia adelante.
  2. No se puede usar para iterar entre dos estructuras de datos diferentes al mismo tiempo.
  3. No se puede usar para rastrear un elemento.
  4. No permite la modificación de la estructura del elemento que se está iterando, ya que almacena la posición del mismo.
  5. Podría ser ineficiente en ciertos casos si atravesar los elementos directamente es más eficiente.

Conclusión

Los iteradores son el método más utilizado para recuperar elementos de la interfaz de recopilación. Se llama Universal Java Cursor ya que es aplicable en todas las clases de Colección.

Artículo recomendado

Esta es una guía para Iterator en Java. Aquí discutimos métodos y ejemplos de Iterator en Java junto con sus limitaciones y ventajas. También puede consultar nuestros otros artículos sugeridos para obtener más información:

  1. Introducción a la ordenación del montón en Java
  2. Anulación en Java (ejemplos)
  3. Iteradores en C # con ventajas y desventajas
  4. Las 10 preguntas principales de la entrevista de la colección Java
  5. Lanzamiento vs Lanzamientos | Las 5 principales diferencias que debes saber