Java LinkedList listIterator()-Methode
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(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 istE next(): Gibt das nächste Element zurück und bewegt den Cursor vorwärtsboolean hasPrevious(): Prüft, ob ein vorheriges Element vorhanden istE 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 einvoid remove(): Entfernt das letzte Element, das durch Aufruf vonnext()oderprevious()das Element, das zurückgegeben wurde vonvoid 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.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
System.out.println("Durchlauf ab Index 1:");
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
Inhalt der verknüpften Liste ändern
Beispiel
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
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 eine
ConcurrentModificationExceptionAusnahme ausgelöst.Anfangsposition: Ein neu erstellter
ListIteratorhat seinen Cursor anfangs vor dem ersten Element positioniert (für die Version ohne Argumente) oder vor der angegebenen Indexposition (für die parametrisierte Version).Grenzprüfung: Beim Aufruf
next()oderprevious()wenn kein entsprechendes Element vorhanden ist, eineNoSuchElementException。Einschränkungen für Änderungsoperationen: Vor dem Aufruf
add()、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 von
ListIteratorist 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