Java Iterator (Iterador)

Java 集合框架Java Collection Framework (Marco de Colecciones de Java)

El iterador de Java (Iterator) es un mecanismo en el Java Collection Framework, una interfaz utilizada para recorrer colecciones (como listas, conjuntos y mapas, etc.).

Proporciona una forma unificada de acceder a los elementos de una colección, sin necesidad de conocer los detalles de implementación específicos de la colección subyacente.

Java Iterator (Iterador) no es una colección, es un método para acceder a colecciones, que se puede utilizar para iterarArrayListyHashSety otras colecciones.

Iterator es la implementación más simple del iterador de Java. ListIterator es una interfaz en la Collection API, que extiende la interfaz Iterator.

La interfaz del iterador define varios métodos, los tres más utilizados son los siguientes:

  • next()- Devuelve el siguiente elemento del iterador y mueve el puntero del iterador a la siguiente posición.

  • hasNext()- Se utiliza para determinar si la colección todavía tiene más elementos a los que se puede acceder.

  • remove()- Elimina de la colección el último elemento al que accedió el iterador (operación opcional).

La clase Iterator se encuentra en el paquete java.util; es necesario importarla antes de usarla. El formato de sintaxis es el siguiente:

import java.util.Iterator; // 引入 Iterator 类

Mediante el uso de iteradores, podemos acceder a los elementos de una colección uno por uno, sin necesidad de utilizar bucles for tradicionales o índices. Esta forma es más concisa y flexible, y es adecuada para diversos tipos de colecciones.

Obtener un iterador

Si una colección quiere obtener un iterador, puede usar el método iterator():

Ejemplo

// Importar las clases ArrayList e Iterator
import java.util.ArrayList;
import java.util.Iterator;

public class EjemploTest {
    public static void main(String[] args) {

        // Crear una colección
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Ejemplo");
        sites.add("Taobao");
        sites.add("Zhihu");

        // Obtener el iterador
        Iterator<String> it = sites.iterator();

        // Imprimir el primer elemento de la colección
        System.out.println(it.next());
    }
}

Al ejecutar el código anterior, el resultado es el siguiente:

Google

Al usar un iterador para recorrer una colección, si se modifica la colección durante el recorrido (por ejemplo, agregar o eliminar elementos), puede producirse la excepción ConcurrentModificationException. Para evitar este problema, se puede utilizar el método propio del iteradorremove()para realizar la operación de eliminación.

Iterar sobre los elementos de la colección

La forma más simple de hacer que el iterador it devuelva todos los elementos de la colección uno por uno es usar un bucle while:

while(it.hasNext()) {
    System.out.println(it.next());
}

El siguiente código imprime todos los elementos de la colección sites:

Ejemplo

// Importar las clases ArrayList e Iterator
import java.util.ArrayList;
import java.util.Iterator;

public class EjemploTest {
    public static void main(String[] args) {

        // Crear una colección
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Ejemplo");
        sites.add("Taobao");
        sites.add("Zhihu");

        // Obtener el iterador
        Iterator<String> it = sites.iterator();

        // Imprimir todos los elementos de la colección
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

Al ejecutar el código anterior, el resultado es el siguiente:

Google
Ejemplo
Taobao
Zhihu

Eliminar elementos

Para eliminar elementos de una colección, se puede usar el método remove().

En el siguiente ejemplo, eliminamos los elementos menores que 10 de la colección:

Ejemplo

// Importar las clases ArrayList e Iterator
import java.util.ArrayList;
import java.util.Iterator;

public class EjemploTest {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        numbers.add(12);
        numbers.add(8);
        numbers.add(2);
        numbers.add(23);
        Iterator<Integer> it = numbers.iterator();
        while(it.hasNext()) {
            Integer i = it.next();
            if(i < 10) {  
                it.remove();  // Eliminar los elementos menores que 10
            }
        }
        System.out.println(numbers);
    }
}

Al ejecutar el código anterior, el resultado es el siguiente:

[12, 23]

Nota:El iterador de Java es un mecanismo de recorrido unidireccional, es decir, solo puede recorrer los elementos de la colección de adelante hacia atrás, no puede recorrer hacia atrás. Además, al usar un iterador para recorrer una colección, no se pueden modificar directamente los elementos de la colección; en su lugar, se debe usar el método remove() del iterador para eliminar el elemento actual.

Java 集合框架Java Collection Framework (Marco de Colecciones de Java)

Otras extensiones