Java - ¿Cómo utilizar Iterator?

A menudo, querrá recorrer los elementos de una colección. Por ejemplo, es posible que desee mostrar cada elemento. La forma más sencilla de hacer esto es emplear un iterador, que es un objeto que implementa la interfaz Iterator o ListIterator.

Iterator le permite recorrer una colección, obteniendo o eliminando elementos. ListIterator extiende Iterator para permitir el recorrido bidireccional de una lista y la modificación de elementos.

Antes de poder acceder a una colección a través de un iterador, debe obtener uno. Cada una de las clases de colección proporciona un método iterator () que devuelve un iterador al inicio de la colección. Al utilizar este objeto iterador, puede acceder a cada elemento de la colección, un elemento a la vez.

En general, para usar un iterador para recorrer el contenido de una colección, siga estos pasos:

  • Obtenga un iterador al inicio de la colección llamando al método iterator () de la colección.

  • Configure un bucle que haga una llamada a hasNext (). Haga que el bucle se repita siempre que hasNext () devuelva verdadero.

  • Dentro del ciclo, obtenga cada elemento llamando a next ().

Para las colecciones que implementan List, también puede obtener un iterador llamando a ListIterator.

Los métodos declarados por iterador

No Señor. Método y descripción
1

boolean hasNext( )

Devuelve verdadero si hay más elementos. De lo contrario, devuelve falso.

2

Object next( )

Devuelve el siguiente elemento. Lanza NoSuchElementException si no hay un elemento siguiente.

3

void remove( )

Elimina el elemento actual. Lanza IllegalStateException si se intenta llamar a remove () que no está precedido por una llamada a next ().

Los métodos declarados por ListIterator

No Señor. Método y descripción
1

void add(Object obj)

Inserta obj en la lista delante del elemento que será devuelto por la próxima llamada a next ().

2

boolean hasNext( )

Devuelve verdadero si hay un elemento siguiente. De lo contrario, devuelve falso.

3

boolean hasPrevious( )

Devuelve verdadero si hay un elemento anterior. De lo contrario, devuelve falso.

4

Object next( )

Devuelve el siguiente elemento. Se lanza una NoSuchElementException si no hay un elemento siguiente.

5

int nextIndex( )

Devuelve el índice del siguiente elemento. Si no hay un elemento siguiente, devuelve el tamaño de la lista.

6

Object previous( )

Devuelve el elemento anterior. Se lanza una NoSuchElementException si no hay un elemento anterior.

7

int previousIndex( )

Devuelve el índice del elemento anterior. Si no hay un elemento anterior, devuelve -1.

8

void remove( )

Elimina el elemento actual de la lista. Se lanza una IllegalStateException si se llama a remove () antes de que se invoca next () o previous ().

9

void set(Object obj)

Asigna obj al elemento actual. Este es el último elemento devuelto por una llamada a next () o previous ().

Ejemplo

Aquí hay un ejemplo que demuestra tanto Iterator como ListIterator. Utiliza un objeto ArrayList, pero los principios generales se aplican a cualquier tipo de colección.

Por supuesto, ListIterator está disponible solo para aquellas colecciones que implementan la interfaz List.

import java.util.*;
public class IteratorDemo {

   public static void main(String args[]) {
      // Create an array list
      ArrayList al = new ArrayList();
      
      // add elements to the array list
      al.add("C");
      al.add("A");
      al.add("E");
      al.add("B");
      al.add("D");
      al.add("F");

      // Use iterator to display contents of al
      System.out.print("Original contents of al: ");
      Iterator itr = al.iterator();
      
      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
      System.out.println();
      
      // Modify objects being iterated
      ListIterator litr = al.listIterator();
      
      while(litr.hasNext()) {
         Object element = litr.next();
         litr.set(element + "+");
      }
      System.out.print("Modified contents of al: ");
      itr = al.iterator();
      
      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
      System.out.println();

      // Now, display the list backwards
      System.out.print("Modified list backwards: ");
      
      while(litr.hasPrevious()) {
         Object element = litr.previous();
         System.out.print(element + " ");
      }
      System.out.println();
   }
}

Esto producirá el siguiente resultado:

Salida

Original contents of al: C A E B D F
Modified contents of al: C+ A+ E+ B+ D+ F+
Modified list backwards: F+ D+ B+ E+ A+ C+