Java LinkedList listIterator()-Methode

Java LinkedList Java LinkedList


listIterator()Die Methode ist eine wichtige Methode in JavaLinkedListvon der Klasse bereitgestellt, gibt sie einListIteratorObjekt, das verwendet wird, um die Elemente in der verknüpften Liste zu durchlaufen. Verglichen mit dem gewöhnlichenIteratorverglichen mit,ListIteratorbietet es umfangreichere Operationsfunktionen.

Methodensyntax

public ListIterator<E> listIterator()
public ListIterator<E> listIterator(int index)
  • Version ohne Argumente: gibt einen Listen-Iterator zurück, der am Anfang der verketteten Liste beginnt
  • Parametrisierte Version: gibt einen Listen-Iterator zurück, der an der angegebenen Indexposition beginnt

Methodenparameter

index-Parameter

  • Typ:int
  • Bedeutung: der Positionsindex, an dem der Iterator beginnt
  • Wertebereich:0 <= index <= size()
  • Wenn der übergebene Index gleich der Größe der verketteten Liste ist (size()), zeigt der Iterator auf das Ende der verketteten Liste

Rückgabewert

Gibt einListIteratorObjekt, das die Möglichkeit bietet, die verkettete Liste bidirektional zu durchlaufen.


Hauptmethoden von ListIterator

Traversierungsmethoden

  • boolean hasNext(): Prüft, ob ein nächstes Element vorhanden ist
  • E next(): Gibt das nächste Element zurück und bewegt den Cursor vorwärts
  • boolean hasPrevious(): Prüft, ob ein vorheriges Element vorhanden ist
  • E previous(): Gibt das vorherige Element zurück und bewegt den Cursor rückwärts

Änderungsmethoden

  • void add(E e): Fügt ein Element an der aktuellen Position ein
  • void remove(): Entfernt das letzte Element, das durch Aufruf vonnext()oderprevious()das Element, das zurückgegeben wurde von
  • void set(E e): Ersetzt das letzte Element, das durch Aufruf vonnext()oderprevious()das Element, das zurückgegeben wurde von

Anwendungsbeispiele

Einfaches Traversierungsbeispiel

Beispiel

import java.util.LinkedList;
import java.util.ListIterator;

public class Main {
    public static void main(String[] args) {
        LinkedList<String> fruits = new LinkedList<>();
        fruits.add("Apfel");
        fruits.add("Banane");
        fruits.add("Cherry");
       
        // ListIterator abrufen
        ListIterator<String> iterator = fruits.listIterator();
       
        // Vorwärtsdurchlauf
        System.out.println("Vorwärtsdurchlauf:");
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }
       
        // Rückwärtsdurchlauf
        System.out.println("\n"Rückwärtsdurchlauf:");
        while(iterator.hasPrevious()) {
            System.out.println(iterator.previous());
        }
    }
}

Durchlaufen ab einer angegebenen Position

Beispiel

ListIterator<String> iterator = fruits.listIterator(1);  // Bei Index 1 beginnen
System.out.println("Durchlauf ab Index 1:");
while(iterator.hasNext()) {
    System.out.println(iterator.next());
}

Inhalt der verknüpften Liste ändern

Beispiel

ListIterator<String> iterator = fruits.listIterator();
iterator.next();  // Zum ersten Element wechseln
iterator.set("Aprikose");  // Das erste Element ändern
iterator.add("Blaubeere");  // Ein neues Element an der aktuellen Position hinzufügen

System.out.println("Geänderte verknüpfte Liste:");
for(String fruit : fruits) {
    System.out.println(fruit);
}

Hinweise

  1. Gleichzeitige Änderung: Wenn die verknüpfte Liste während der Iteration auf andere Weise geändert wird (statt durch die eigenen Methoden des Iterators), wird eineConcurrentModificationExceptionAusnahme ausgelöst.

  2. Anfangsposition: Ein neu erstellterListIteratorhat seinen Cursor anfangs vor dem ersten Element positioniert (für die Version ohne Argumente) oder vor der angegebenen Indexposition (für die parametrisierte Version).

  3. Grenzprüfung: Beim Aufrufnext()oderprevious()wenn kein entsprechendes Element vorhanden ist, eineNoSuchElementException。

  4. Einschränkungen für Änderungsoperationen: Vor dem Aufrufadd()、remove()oderset()müssen Sie zuerst aufrufennext()oderprevious(), andernfalls eineIllegalStateException。


Unterschiede zu Iterator

Merkmal Iterator ListIterator
Durchlaufrichtung Einseitig (nur vorwärts) Zweiseitig (vorwärts und rückwärts)
Änderungsmethoden Nur remove() add(), remove(), set()
Index abrufen Nicht unterstützt Unterstützt nextIndex() und previousIndex()
Erstellungsmethode iterator() listIterator()

Leistungsüberlegungen

  • LinkedListvonlistIterator()Die Methode hat eine Zeitkomplexität von O(1), da sie einfach ein neues Iterator-Objekt erstellt.
  • Die verschiedenen Operationen des Iterators selbst (wie z. B.next()、previous()) haben eine Zeitkomplexität von O(1), weilLinkedLister auf Basis einer doppelt verketteten Liste implementiert ist.
  • Für Szenarien, die häufiges Einfügen oder Löschen in der Mitte der Liste erfordern, ist die Verwendung vonListIteratorist effizienter als die direkte Arbeit über Indizes.

Zusammenfassung

LinkedListvonlistIterator()Die Methode bietet leistungsfähigere Funktionalität als ein regulärer Iterator und eignet sich besonders für Szenarien, in denen Sie den Inhalt der verketteten Liste während des Durchlaufs ändern oder einen bidirektionalen Durchlauf benötigen. Wenn Sie diese Methode verstehen und geschickt einsetzen, können Sie effizienter arbeiten mitLinkedList。

Java LinkedList Java LinkedList

Andere Erweiterungen