Wie wir wissen, hat Java vier Cursor: Enumeration, Iterator, ListIterator und Spliterator. Wir haben bereits Enumeration und Iterator Cursors in meinem vorherigen Beitrag diskutiert. Bevor Sie diesen Beitrag durchgehen, lesen Sie bitte meinen vorherigen Beitrag unter: Java Iterator. In diesem Beitrag werden wir über den dritten Java-Cursor sprechen: ListIterator.
Java ListIterator
Wie der Iterator ist ListIterator ein Java-Iterator, der verwendet wird, um Elemente nacheinander aus einem List-implementierten Objekt zu durchlaufen.
- Er ist seit Java 1.2 verfügbar.
- Er erweitert das Iterator-Interface.
- Er ist nur für List-implementierte Klassen nützlich.
- Im Gegensatz zum Iterator unterstützt er alle vier Operationen: CRUD (CREATE, READ, UPDATE und DELETE).
- Im Gegensatz zum Iterator unterstützt er sowohl die Vorwärts- als auch die Rückwärts-Iteration.
- Es ist ein bidirektionaler Iterator.
- Es hat kein aktuelles Element; seine Cursor-Position liegt immer zwischen dem Element, das durch einen Aufruf von previous() zurückgegeben würde, und dem Element, das durch einen Aufruf von next() zurückgegeben würde.
ANMERKUNG:- Was sind CRUD-Operationen in der Collection-API?
- CREATE: Hinzufügen neuer Elemente zum Collection-Objekt.
- READ: Abrufen von Elementen aus dem Collection-Objekt.
- UPDATE: Aktualisierung oder Einstellung vorhandener Elemente im Collection-Objekt.
- DELETE: Entfernen von Elementen aus dem Collection-Objekt.
Java-ListIterator-Klassendiagramm
In Java ist ListIterator eine Schnittstelle in der Collection-API. Sie erweitert die Iterator-Schnittstelle. Um Vorwärts- und Rückwärtsiterationen sowie CRUD-Operationen zu unterstützen, verfügt sie über die folgenden Methoden. Wir können diesen Iterator für alle implementierten Klassen verwenden, die die List-Schnittstelle implementieren, wie z.B. ArrayList, CopyOnWriteArrayList, LinkedList, Stack, Vector, usw. In den kommenden Abschnitten werden wir diese Methoden genauer erkunden, zusammen mit einigen nützlichen Methoden.
Java-ListIterator-Methoden
Die Java-ListIterator-Schnittstelle hat die folgenden Methoden.
- void add(E e): Fügt das angegebene Element in die Liste ein.
- boolean hasNext(): Gibt true zurück, wenn dieser ListIterator beim Durchlaufen der Liste in Vorwärtsrichtung weitere Elemente hat.
- boolean hasPrevious(): Gibt true zurück, wenn dieser ListIterator beim Durchlaufen der Liste in Rückwärtsrichtung weitere Elemente hat.
- E next(): Returns the next element in the list and advances the cursor position.
- int nextIndex(): Gibt den Index des Elements zurück, das durch einen nachfolgenden Aufruf von next() zurückgegeben würde.
- E previous(): Returns the previous element in the list and moves the cursor position backwards.
- int previousIndex(): Gibt den Index des Elements zurück, das durch einen nachfolgenden Aufruf von previous() zurückgegeben würde.
- void remove(): Entfernt das letzte Element aus der Liste, das von next() oder previous() zurückgegeben wurde.
- void set(E e): Ersetzt das zuletzt von next() oder previous() zurückgegebene Element durch das angegebene Element.
Wir werden diese Methoden Schritt für Schritt mit nützlichen Beispielen in den kommenden Abschnitten erkunden.
Java ListIterator Grundbeispiel
In diesem Abschnitt werden wir einige ListIterator-Methoden mit Beispielen besprechen. Zuerst müssen wir verstehen, wie wir dieses Iterator-Objekt erhalten. Wie bekommt man ListIterator?
ListIterator<E> listIterator()
Es gibt einen ListIterator über die Elemente in dieser Liste zurück. Beispiel:-
import java.util.*;
public class ListIteratorDemo
{
public static void main(String[] args)
{
List();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// ListIterator abrufen
ListIterator<String> namesIterator = names.listIterator();
// Elemente durchlaufen
while(namesIterator.hasNext()){
System.out.println(namesIterator.next());
}
// Die Enhanced for-Schleife erstellt hier einen internen Iterator.
for(String name: names){
System.out.println(name);
}
}
}
Ausgabe:-
Rams
Posa
Chinni
ListIterator Bi-direktionales Iterationsbeispiel
Im Abschnitt werden wir untersuchen, wie die Methoden des ListIterator funktionieren, um Vorwärts- und Rückwärtsiterationen durchzuführen.
import java.util.*;
public class BiDirectinalListIteratorDemo
{
public static void main(String[] args)
{
List();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// ListIterator abrufen
ListIterator<String> listIterator = names.listIterator();
// Elemente durchlaufen
System.out.println("Forward Direction Iteration:");
while(listIterator.hasNext()){
System.out.println(listIterator.next());
}
// Elemente durchlaufen, the iterator is at the end at this point
System.out.println("Backward Direction Iteration:");
while(listIterator.hasPrevious()){
System.out.println(listIterator.previous());
}
}
}
Ausgabe:-
Forward Direction Iteration:
Rams
Posa
Chinni
Backward Direction Iteration:
Chinni
Posa
Rams
Arten von Java-Iteratoren
Wie wir wissen, hat Java vier Cursor: Enumeration, Iterator, ListIterator und Spliterator. Wir können sie wie folgt in zwei Haupttypen einteilen:
- Uni-direktionale Iteratoren
Sie sind Cursors, die nur Vorwärtsiterationen unterstützen. Zum Beispiel Enumeration, Iterator usw. sind uni-direktionale Iteratoren.- Bi-direktionale Iteratoren
Sie sind Cursors, die sowohl Vorwärts- als auch Rückwärtsiterationen unterstützen. Zum Beispiel ist ListIterator ein bi-direktionaler Iterator.
Wie funktioniert der Java ListIterator intern?
Wie wir wissen, funktioniert der Java ListIterator in beide Richtungen, das bedeutet, er funktioniert sowohl in Vorwärts- als auch in Rückwärtsrichtung. Es ist ein bi-direktionaler Iterator. Um diese Funktionalität zu unterstützen, verfügt er über zwei Satz von Methoden.
- Vorwärtsrichtungs-Iterationsmethoden
Wir müssen die folgenden Methoden verwenden, um die Vorwärtsrichtungsiteration zu unterstützen:
- hasNext())
- next()
- nextIndex()
- Rückwärtsrichtungs-Iterationsmethoden
Wir müssen die folgenden Methoden verwenden, um die Rückwärtsrichtungsiteration zu unterstützen:
- hasPrevious()
- previous()
- previousIndex()
In meinem vorherigen Beitrag haben wir bereits besprochen, wie ein Iterator intern in Vorwärtsrichtung im Abschnitt „Wie funktioniert der Java-Iterator intern?“ funktioniert. Auch der ListIterator funktioniert auf die gleiche Weise. Wenn Sie meinen vorherigen Beitrag durchgehen möchten, klicken Sie bitte hier: Java Iterator. In diesem Abschnitt werden wir besprechen, wie ListIterator in Rückwärtsrichtung funktioniert. Lassen Sie uns das folgende LinkedList-Objekt verwenden, um diese Funktionalität zu verstehen.
List<String> names = new LinkedList<>();
names.add("E-1");
names.add("E-2");
names.add("E-3");
.
.
.
names.add("E-n");
Erstellen Sie nun ein ListIterator-Objekt auf LinkedList, wie unten gezeigt:
ListIterator<String> namesIterator = names.listLterator();
Annehmen, dass „namesIterator“ ListIterator wie folgt aussieht: Hier zeigt der Cursor des ListIterators auf das Element vor dem ersten Element der Liste. Führen Sie nun den folgenden Codeausschnitt in der While-Schleife aus.
namesIterator.hasNext();
namesIterator.next();
Wenn wir den obigen Codeausschnitt in der While-Schleife ausführen, zeigt der Cursor des ListIterators auf das letzte Element in der LinkedList. Dann können wir den folgenden Codeausschnitt ausführen, um von hinten nach vorne zu traversieren.
namesIterator.hasPrevious();
namesIterator.previous();
Wenn wir den obigen Code-Schnipsel ausführen, zeigt der Cursor von ListIterator auf das „vorletzte“ Element in der Liste, wie im obigen Diagramm gezeigt. Führen Sie diesen Vorgang durch, um den Cursor von ListIterator auf das erste Element der LinkedList zu bringen.
Nachdem das erste Element gelesen wurde, gibt der untenstehende Code-Schnipsel den Wert „false“ zurück.
namesIterator.hasPrevious();
Da der Cursor von ListIterator vor dem ersten Element der LinkedList zeigt, gibt die Methode hasPrevious() einen falschen Wert zurück. Nachdem alle diese Diagramme beobachtet wurden, können wir sagen, dass der Java ListIterator sowohl Vorwärts- als auch Rückwärtsiterationen unterstützt, wie in den folgenden Diagrammen gezeigt. Daher wird er auch als bidirektionaler Cursor bezeichnet. Vorwärtsgerichteter ListIterator
Rückwärtsgerichteter ListIterator
Vorteile des ListIterator
Im Gegensatz zum Iterator hat der ListIterator folgende Vorteile:
- Wie der Iterator unterstützt er LESE- und LÖSCHVORGÄNGE.
- Er unterstützt auch ERSTELLEN- und AKTUALISIEREN-Vorgänge.
- Das bedeutet, es unterstützt CRUD-Operationen: CREATE, READ, UPDATE und DELETE Operationen.
- Es unterstützt sowohl die Vorwärts- als auch die Rückwärtsiteration. Das bedeutet, es handelt sich um einen bidirektionalen Java-Cursor.
- Die Methodennamen sind einfach und leicht zu verwenden.
Einschränkungen des ListIterator
Im Vergleich zu Iterator hat der Java ListIterator viele Vorteile. Es hat jedoch immer noch einige Einschränkungen.
- Es ist nur eine Iterator-Implementierung für Listen.
- Im Gegensatz zum Iterator ist es nicht für die gesamte Collection-API anwendbar.
- Es ist kein universeller Java-Cursor.
- Im Vergleich zum Spliterator unterstützt es KEINE parallele Iteration von Elementen.
- Im Vergleich zum Spliterator unterstützt es KEINE bessere Leistung bei der Iteration großer Datenmengen.
Ähnlichkeiten zwischen Iterator und ListIterator
In diesem Abschnitt werden die Ähnlichkeiten zwischen den beiden Java-Cursors, Iterator und ListIterator, diskutiert.
- Beide wurden in Java 1.2 eingeführt.
- Beide sind Iteratoren, die zur Iteration von Collection- oder Listenelementen verwendet werden.
- Beide unterstützen Lese- und Löschvorgänge.
- Beide unterstützen die Vorwärtsiteration.
- Beide sind keine Legacy-Schnittstellen.
Unterschiede zwischen Iterator und ListIterator
In diesem Abschnitt werden die Unterschiede zwischen den beiden Java-Iteratoren, Iterator und ListIterator, diskutiert.
Iterator | ListIterator |
---|---|
Introduced in Java 1.2. | Introduced in Java 1.2. |
It is an Iterator for whole Collection API. | It is an Iterator for only List implemented classes. |
It is an Universal Iterator. | It is NOT an Universal Iterator. |
It supports only Forward Direction Iteration. | It supports both Forward and Backward Direction iterations. |
It’s a Uni-Directional Iterator. | It’s a Bi-Directional Iterator. |
It supports only READ and DELETE operations. | It supports all CRUD operations. |
We can get Iterator by using iterator() method. | We can ListIterator object using listIterator() method. |
Das ist alles über den ListIterator in Java. Ich hoffe, diese Java-ListIterator-Theorien und -Beispiele helfen Ihnen beim Einstieg in die ListIterator-Programmierung. Referenz: ListIterator API-Dokumentation
Source:
https://www.digitalocean.com/community/tutorials/java-listiterator