ListIterator en Java

ListIterator es uno de los cuatro cursores de Java. Es un iterador de Java que se usa para recorrer todo tipo de listas, incluidas ArrayList , Vector , LinkedList , Stack, etc. Está disponible desde Java 1.2. Extiende la interfaz del iterador . La jerarquía de ListIterator es la siguiente: 

ListIterator Hierarchy in Java

Algunos puntos importantes sobre ListIterator

  1. Es útil para listar clases implementadas.
  2. Disponible desde java 1.2.
  3. Admite recorrido bidireccional. es decir, tanto hacia adelante como hacia atrás.
  4. Admite las cuatro operaciones CRUD (Crear, Leer, Actualizar, Eliminar).

Dato interesante sobre ListIterator

No hay ningún elemento actual en ListIterator. Su cursor siempre se encuentra entre los elementos anterior y siguiente. El anterior() volverá a los elementos anteriores y el siguiente() volverá al siguiente elemento. Por tanto, para una lista de n longitud, hay n+1 cursores posibles.

lisiterator cursors

Sintaxis: Declaración

public interface ListIterator<E> extends Iterator<E>

Donde E representa el tipo genérico, es decir, cualquier parámetro de cualquier tipo/objeto definido por el usuario.

Sintaxis: para obtener un iterador de lista en una lista

ListIterator<E> listIterator()  

Esto devuelve el iterador de lista de todos los elementos de la lista.

Ejemplo:

Java

// Java Program to Show the Usage of listIterator
 
import java.util.*;
 
public class ListIteratorDemo {
   
    // Main driver method
    public static void main(String[] args)
    {
        // Creating a list of names
        List<String> names = new LinkedList<>();
       
        names.add("Welcome");
        names.add("To");
        names.add("Gfg");
 
        // Getting ListIterator
        ListIterator<String> namesIterator
            = names.listIterator();
 
        // Traversing elements using next() method
        while (namesIterator.hasNext()) {
            System.out.println(namesIterator.next());
        }
 
        // for-each loop creates Internal Iterator here.
        for (String s : names) {
            System.out.println(s);
        }
    }
}
Producción

Welcome
To
Gfg
Welcome
To
Gfg

ListIterator es un iterador bidireccional. Para esta funcionalidad, tiene dos tipos de métodos:

1. Iteración de dirección de avance

  • hasNext(): este método devuelve verdadero cuando la lista tiene más elementos para recorrer mientras se atraviesa en la dirección de avance
  • next(): este método devuelve el siguiente elemento de la lista y avanza la posición del cursor.
  • nextIndex(): este método devuelve el índice del elemento que se devolvería al llamar a la función next().

2. Iteración de dirección hacia atrás

  • hasPrevious(): este método devuelve verdadero cuando la lista tiene más elementos para recorrer mientras se atraviesa en la dirección inversa
  • anterior(): este método devuelve el elemento anterior de la lista y desplaza el cursor una posición hacia atrás.
  • anteriorIndex(): este método devuelve el índice del elemento que se devolvería al llamar a la función anterior().

Código de ejemplo que muestra las iteraciones de dirección tanto hacia adelante como hacia atrás usando el Iterador de lista:

Java

// Java Program to traverse the list both in forward and
// backward direction using listIterator
 
import java.util.*;
 
public class GFG {
   
    public static void main(String[] args)
    {
          // list of names
        List<String> names = new LinkedList<>();
        names.add("learn");
        names.add("from");
        names.add("Geeksforgeeks");
 
        // Getting ListIterator
        ListIterator<String> listIterator
            = names.listIterator();
 
        // Traversing elements
        System.out.println("Forward Direction Iteration:");
        while (listIterator.hasNext()) {
            System.out.println(listIterator.next());
        }
 
        // Traversing elements, the iterator is at the end
        // at this point
        System.out.println("Backward Direction Iteration:");
        while (listIterator.hasPrevious()) {
            System.out.println(listIterator.previous());
        }
    }
}
Producción

Forward Direction Iteration:
learn
from
Geeksforgeeks
Backward Direction Iteration:
Geeksforgeeks
from
learn

Métodos de iterador de ArrayList

A. listIterator(): El método listIterator() de la clase java.util.ArrayList se utiliza para devolver un iterador de lista sobre los elementos de esta lista (en la secuencia adecuada). El iterador de lista devuelto es a prueba de fallas.

Sintaxis:

public ListIterator listIterator()

Valor devuelto: este método devuelve un iterador de lista sobre los elementos de esta lista (en la secuencia adecuada).

B. listIterator(índice int)

Este método listIterator(int index) se usa para devolver un iterador de lista sobre los elementos de esta lista (en la secuencia adecuada), comenzando en la posición especificada en la lista. El índice especificado indica el primer elemento que devolvería una llamada inicial a next. Una llamada inicial a la anterior devolvería el elemento con el índice especificado menos uno. El iterador de lista devuelto es a prueba de fallas.

Sintaxis:

public ListIterator listIterator(int index)

Parámetros: este método toma el índice del primer elemento como un parámetro que devolverá el iterador de la lista (mediante una llamada a next)

Valor de retorno: este método devuelve un iterador de lista sobre los elementos de esta lista (en la secuencia adecuada), comenzando en la posición especificada en la lista.

Excepción: este método genera una excepción IndexOutOfBoundsException si el índice está fuera de rango (tamaño del índice()).

ventajas:

  • Admite las cuatro operaciones CRUD (Crear, Leer, Actualizar, Eliminar).
  • Admite desplazamiento bidireccional, es decir, iteración de dirección tanto hacia adelante como hacia atrás.
  • Los nombres de métodos simples son fáciles de usar.

Limitaciones:

  • Este iterador es solo para clases de implementación de listas.
  • No es un cursor universal.
  • No es aplicable a todas las API de recopilación.
  • El iterador de lista no admite la iteración paralela de elementos.
  • listiterator no admite el buen rendimiento de la iteración de numerosos elementos.

Iterador v/s ListIterator

similitudes:

  • Ambos se introducen en Java 1.2.
  • Ambos se utilizan para listas de iteraciones.
  • Ambos admiten el recorrido de dirección hacia adelante.
  • Ambos admiten operaciones de LECTURA y ELIMINACIÓN.

Diferencias:

                iterador

                                           ListIterator

Puede atravesar una colección de cualquier tipo.  Atraviesa solo clases implementadas de colección de listas como LinkedList , ArrayList, etc.
El recorrido solo se puede realizar en la dirección de avance. El recorrido de los elementos se puede realizar tanto en dirección hacia adelante como hacia atrás.
El objeto Iterator se puede crear llamando al método iterator() de la interfaz de colección. El objeto ListIterator se puede crear llamando al método listIterator() de la interfaz de colección.
No se permite la eliminación de elementos. Se permite la eliminación de elementos.
Lanza ConcurrentModificationException al realizar una operación de suma. Por lo tanto, la adicción no está permitida.  Se permite la adición de elementos.
En el iterador, no podemos acceder al índice del elemento atravesado. En listIterator, tenemos los métodos nextIndex() y previousIndex() para acceder a los índices del elemento atravesado o del siguiente elemento atravesado.
No se permite la modificación de ningún elemento. Se permite la modificación.

Métodos de ListIterator

Método

Descripción

añadir (E mi) Este método inserta el elemento especificado en la lista.
tieneSiguiente(), Esto devuelve verdadero si la lista tiene más elementos para recorrer.
tieneAnterior() Esto devuelve verdadero si el iterador de lista tiene más elementos mientras recorre la lista en dirección hacia atrás.
Siguiente() Este método devuelve el siguiente elemento y aumenta el cursor en una posición.
siguienteÍndice() Este método devuelve el índice del elemento que se devolvería al llamar al método next().
anterior() Este método devuelve el elemento anterior de la lista y desplaza el cursor una posición hacia atrás.
índice anterior() Este método devuelve el índice del elemento que se devolvería al llamar al método anterior().
retirar() Este método elimina el último elemento de la lista que se devolvió al llamar al elemento del método next() o anterior().
conjunto(E e) Este método reemplaza el último elemento que se devolvió al llamar al método next() o anterior() con el elemento especificado.

Métodos declarados en la interfaz java. util.Iterator

Método

Descripción

vacío predeterminado para cada resto (acción Consumer<? super E>) Realiza la acción dada para cada elemento restante hasta que se hayan procesado todos los elementos o la acción genere una excepción.

Publicación traducida automáticamente

Artículo escrito por goelshubhangi3118 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *