Java LinkedList listIterator() método
listIterator()El método en Java esLinkedListun método importante proporcionado por la clase, que devuelve unListIteratorobjeto, utilizado para recorrer los elementos de la lista enlazada. En comparación con elIteratorIterator normal,ListIteratorproporciona funciones de operación más ricas.
Sintaxis del método
public ListIterator<E> listIterator(int index)
- Versión sin parámetros: devuelve un iterador de lista que comienza desde el inicio de la lista enlazada
- Versión con parámetros: devuelve un iterador de lista que comienza desde la posición de índice especificada
Parámetros del método
Parámetro index
- Tipo:
int - Significado: el índice de posición donde comienza el iterador
- Rango de valores:
0 <= index <= size() - Si el índice pasado es igual al tamaño de la lista enlazada (
size()), el iterador apuntará al final de la lista enlazada
Valor de retorno
Devuelve unListIteratorobjeto, que proporciona la capacidad de recorrer la lista enlazada bidireccionalmente.
Métodos principales de ListIterator
Métodos de recorrido
boolean hasNext(): comprueba si hay un siguiente elementoE next(): devuelve el siguiente elemento y avanza el cursorboolean hasPrevious(): comprueba si hay un elemento anteriorE previous(): devuelve el elemento anterior y retrocede el cursor
Métodos de modificación
void add(E e): inserta un elemento en la posición actualvoid remove(): elimina lo devuelto por la última llamadanext()oprevious()el elemento devueltovoid set(E e): reemplaza lo devuelto por la última llamadanext()oprevious()el elemento devuelto
Ejemplo de uso
Ejemplo básico de recorrido
Ejemplo
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
// Obtener ListIterator
ListIterator<String> iterator = fruits.listIterator();
// Recorrido hacia adelante
System.out.println("Recorrido hacia adelante:");
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
// Recorrido hacia atrás
System.out.println("\n"Recorrido hacia atrás:");
while(iterator.hasPrevious()) {
System.out.println(iterator.previous());
}
}
}
Recorrido desde una posición especificada
Ejemplo
System.out.println("Recorrido desde el índice 1:");
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
Modificar el contenido de la lista enlazada
Ejemplo
iterator.next(); // Moverse al primer elemento
iterator.set("Apricot"); // Modificar el primer elemento
iterator.add("Blueberry"); // Agregar un nuevo elemento en la posición actual
System.out.println("Lista enlazada modificada:");
for(String fruit : fruits) {
System.out.println(fruit);
}
Notas
Modificación concurrente: si la lista enlazada se modifica por otros medios durante la iteración (no a través de los métodos del propio iterador), se lanzará una
ConcurrentModificationExceptionexcepción.Posición inicial: el recién creado
ListIteratortiene la posición inicial del cursor antes del primer elemento (para la versión sin parámetros) o antes de la posición de índice especificada (para la versión con parámetros).Comprobación de límites: al llamar a
next()oprevious()si no hay un elemento correspondiente, se lanzará unaNoSuchElementException。Restricciones de las operaciones de modificación: antes de llamar a
add()、remove()oset()primero se debe llamar anext()oprevious(), de lo contrario se lanzará unaIllegalStateException。
Diferencias con Iterator
| Característica | Iterator | ListIterator |
|---|---|---|
| Dirección de recorrido | Unidireccional (solo hacia adelante) | Bidireccional (hacia adelante y hacia atrás) |
| Métodos de modificación | Solo remove() | add(), remove(), set() |
| Obtener índice | No soportado | Soporta nextIndex() y previousIndex() |
| Forma de creación | iterator() | listIterator() |
Consideraciones de rendimiento
LinkedListdelistIterator()La complejidad temporal del método es O(1), porque solo crea un nuevo objeto iterador.- Las diversas operaciones del iterador en sí (como
next()、previous()) tienen una complejidad temporal de O(1), porqueLinkedListestá implementada sobre una lista doblemente enlazada. - Para escenarios donde se necesitan operaciones frecuentes de inserción o eliminación en el medio de la lista, usar
ListIteratores más eficiente que operar directamente a través de índices.
Resumen
LinkedListdelistIterator()El método proporciona funciones más potentes que los iteradores normales, especialmente adecuado para escenarios donde se necesita modificar el contenido de la lista enlazada durante el recorrido o se necesita un recorrido bidireccional. Comprender y usar este método con fluidez te permitirá operar de manera más eficienteLinkedList。
Java LinkedList