java iterator learn use iterators java with examples
In diesem Tutorial lernen wir Iteratoren in Java kennen. Wir werden eine ausführliche Diskussion über die Iterator- und ListIterator-Schnittstellen in Java haben:
In einem unserer vorherigen Tutorials haben wir uns mit dem Java Collection Framework und seinen verschiedenen unterstützenden Schnittstellen und Klassen befasst.
Wenn Sie eine Sammlung haben, möchten Sie auf deren Elemente zugreifen, die Elemente hinzufügen / entfernen oder verarbeiten. Um all diese Verarbeitung über ein Java-Programm durchführen zu können, sollten Sie in der Lage sein, die von Ihnen verwendete Sammlung zu durchlaufen. Hier kommt der Iterator ins Spiel.
Was du lernen wirst:
- Was ist ein Java-Iterator?
- Fazit
Was ist ein Java-Iterator?
In Java ist ein Iterator ein Konstrukt, mit dem die Sammlung durchlaufen oder durchlaufen wird.
Um einen Iterator verwenden zu können, müssen Sie das Iteratorobjekt mit dem Befehl „ iterator () ” Methode der Erfassungsschnittstelle. Java Iterator ist eine Sammlung-Framework-Schnittstelle und Teil des Pakets „java.util“. Mit Java Iterator können Sie die Sammlung von Objekten durchlaufen.
Die Java Iterator-Schnittstelle ersetzt den Enumerator, der zuvor verwendet wurde, um einige einfache Sammlungen wie Vektoren zu durchlaufen.
Die Hauptunterschiede zwischen Java Iterator und Enumerator sind:
- Beträchtliche Verbesserung der Methodennamen.
- Sie können Methodenelemente mit einem Iterator aus der Sammlung entfernen, die durchlaufen wird.
In diesem Tutorial werden die Details der Iterator-Schnittstelle und der ListIterator-Schnittstelle erläutert, die eine bidirektionale Schnittstelle ist.
Iteratortypen
- Enumerator
- Iterator
- ListIterator
Ein Enumerator wird derzeit selten verwendet. Daher konzentrieren wir uns in unserer Tutorial-Reihe auf Iterator- und ListIterator-Schnittstellen.
Iterator-Schnittstelle In Java
Die Iterator-Oberfläche in Java ist Teil des Collections-Frameworks im Paket 'java.util' und ein Cursor, mit dem die Sammlung von Objekten schrittweise durchlaufen werden kann.
Die Iterator-Schnittstelle weist die folgenden Hauptmerkmale auf:
- Die Iterator-Schnittstelle ist ab dem Java 1.2-Erfassungsframework verfügbar.
- Es durchläuft die Sammlung von Objekten nacheinander.
- Im Volksmund als 'Universal Java Cursor' bekannt, da es mit allen Sammlungen funktioniert.
- Diese Schnittstelle unterstützt Lese- und Entfernungsoperationen, d. H. Sie können ein Element während einer Iteration mit dem Iterator entfernen.
Die allgemeine Darstellung der Iteratorschnittstelle ist unten angegeben:
Schauen wir uns als nächstes die oben aufgeführten Iterator-Methoden an.
Iteratormethoden
Die Iterator-Schnittstelle unterstützt die folgenden Methoden:
# 1) Weiter ()
Prototyp: E next ()
Parameter: keine Parameter
Rückgabetyp: E -> Element
Beschreibung: Gibt das nächste Element in der Sammlung zurück.
Wenn die Iteration (Sammlung) keine weiteren Elemente enthält, wird sie ausgelöst NoSuchElementException .
# 2) hasNext ()
Prototyp: boolean hasNext ()
Parameter: NULL
Rückgabetyp: true => Die Sammlung enthält Elemente.
False => keine Elemente mehr
Beschreibung: Die Funktion hasNext () prüft, ob die Sammlung weitere Elemente enthält, auf die mit einem Iterator zugegriffen wird. Wenn keine weiteren Elemente vorhanden sind, rufen Sie die next () -Methode nicht auf. Mit anderen Worten kann diese Funktion verwendet werden, um zu entscheiden, ob die next () -Methode aufgerufen werden soll.
# 3) entferne ()
Prototyp: void remove ()
Parameter: NULL
Rückgabetyp: NULL
Beschreibung: Entfernt das letzte vom Iterator zurückgegebene Element, das über die zugrunde liegende Sammlung iteriert. Die remove () -Methode kann nur einmal pro next () -Aufruf aufgerufen werden.
Wenn der Iterator die Entfernungsoperation nicht unterstützt, wird er ausgelöst UnSupportedOperationException . Es wirft Illegale staatliche Ausnahme wenn die nächste Methode noch nicht aufgerufen wird.
# 4) forEachRemaining ()
Prototyp: void forEachRemaining (Verbraucher super IS > Aktion)
Parameter: Aktion => auszuführende Aktion
Rückgabetyp: Leere
Beschreibung: Führt die angegebene Aktion für jedes der verbleibenden Elemente der Sammlung aus, bis alle Elemente erschöpft sind oder die Aktion eine Ausnahme auslöst. Durch Aktion ausgelöste Ausnahmen werden an den Aufrufer weitergegeben.
Wenn die Aktion null ist, wird sie ausgelöst nullPointerException . Diese Funktion ist eine neue Erweiterung der Iterator-Schnittstelle in Java 8.
Java Iterator Beispiel
Lassen Sie uns ein Java-Programm implementieren, um die Verwendung der Iterator-Schnittstelle zu demonstrieren. Das folgende Programm erstellt eine ArrayList von Blumen. Dann erhält es einen Iterator unter Verwendung der iterator () -Methode der ArrayList. Danach wird die Liste durchlaufen, um jedes Element anzuzeigen.
import java.util.*; public class Main { public static void main(String() args) { List flowers = new ArrayList(); flowers.add('Rose'); flowers.add('Jasmine'); flowers.add('sunflower'); // Get Iterator IteratorflowersIterator = flowers.iterator(); System.out.println('Contents of ArrayList:'); // Traverse elements using iterator while(flowersIterator.hasNext()){ System.out.print(flowersIterator.next() + ' '); } } }
Ausgabe:
Einschränkungen der Iteratorschnittstelle
- Der Vorgang zum Ersetzen eines Elements oder zum Hinzufügen eines neuen Elements kann mit diesem Iterator nicht ausgeführt werden.
- Die Iteration verläuft nur in einer Richtung, d. H. In Vorwärtsrichtung.
- Unterstützt nur sequentielle Iteration.
- Wenn große Datenmengen iteriert werden sollen, wird die Leistung des Iterators beeinträchtigt.
Iterator VsWiederholbar
Obwohl die Schnittstellen Iterable und Iterator ähnlich klingen, sind sie völlig unterschiedlich. Eine Klasse, die die Iterable-Schnittstelle implementiert, kann über die Klassenobjekte iterieren, die die Iterator-Schnittstelle verwenden.
Im Folgenden sind einige der Hauptunterschiede zwischen diesen beiden Schnittstellen aufgeführt, die Sie beachten müssen:
Iterierbare Schnittstelle | Iterator-Schnittstelle |
---|---|
Stellt eine Sammlung dar, die mit foreach loop durchlaufen werden kann. | Ermöglicht das Durchlaufen einer anderen Sammlung. |
Die Klasse, die die iterierbare Schnittstelle implementiert, muss die iterator () -Methode überschreiben. | Die Methoden hasNext () und next () der Iterator-Schnittstelle müssen von der Klasse, die sie implementiert, überschrieben werden. |
Speichert nicht den aktuellen Status. | Speichert den aktuellen Iterationsstatus. |
Bei jedem Aufruf der iterator () -Methode sollte eine Instanz der Iterator-Schnittstelle erstellt werden. | Kein solcher Vertrag für die Iterator-Schnittstelle. |
Bewegt sich nur in Vorwärtsrichtung. | Bewegt sich in Vorwärtsrichtung und Subschnittstellen wie listIterator unterstützen bidirektionales Traversing. |
Bietet keine Methode zum Ändern der Elemente während der Iteration. | Bietet die Methode zum Entfernen, mit der Elemente während der Iteration entfernt werden können. |
ListIterator-Schnittstelle In Java
Die Schnittstelle ListIterator ist eine Subschnittstelle der Iteratorschnittstelle. Es funktioniert für Listentypsammlungen wie verknüpfte Listen, Array-Listen usw. Somit überwindet diese Schnittstelle die Mängel der Iterator-Schnittstelle.
Die Hauptmerkmale der ListIterator-Schnittstelle umfassen:
- Die ListIterator-Schnittstelle erweitert die Iterator-Schnittstelle.
- Die ListIterator-Schnittstelle unterstützt CRUD-Operationen, d. H. Erstellen, Lesen, Aktualisieren und Löschen.
- Unterstützt die Iteration sowohl in Vorwärts- als auch in Rückwärtsrichtung.
- Da diese Schnittstelle bidirektional ist, befindet sich der Cursor immer zwischen dem vorherigen und dem nächsten Element.
- Diese Schnittstelle funktioniert hauptsächlich für Listenimplementierungen wie ArrayList, LinkedList usw.
- Verfügbar seit Java 1.2
Die Schnittstelle ListIterator wird wie folgt dargestellt:
Wie bereits erwähnt, erweitert die ListIterator-Schnittstelle die Iterator-Schnittstelle. Abgesehen von der Unterstützung aller oben dargestellten Methoden der Iterator-Schnittstelle verfügt die ListIterator-Schnittstelle daher auch über eigene Methoden, mit denen CRUD-Operationen sowie bidirektionale Iterationen ausgeführt werden können.
Lassen Sie uns die ListIterator-Methoden im Detail diskutieren.
ListIterator-Methoden
Beachten Sie, dass die Iterator-Schnittstellenmethoden next (), hasNext () und remove () genauso funktionieren wie die ListIterator-Schnittstelle. Daher werden wir diese Methoden in diesem Abschnitt überspringen. Zusätzlich zu den oben genannten Methoden verfügt ListIterator über folgende Methoden:
Bisherige()
Prototyp: E vorherige ()
Parameter: NULL
Rückgabetyp:
E- vorheriges Element in der Liste.
- - 1 - wenn sich der Iterator am Anfang der Liste befindet.
Beschreibung: Diese Funktion gibt das vorherige Element in der Liste zurück. Sobald das vorherige Element zurückgegeben wurde, wird der Cursor rückwärts zum nächsten Element bewegt.
hasPrevious ()
Prototyp: boolean hasPrevious ()
Parameter: NULL
Rückgabetyp: true => Iterator enthält mehr Elemente, wenn die Liste rückwärts durchlaufen wird.
Beschreibung: Diese Funktion prüft, ob der ListIterator mehr Elemente in Rückwärtsrichtung enthält.
previousIndex
Prototyp: int previousIndex ()
Parameter: NULL
Rückgabetyp:
int - Index des vorherigen Elements
- - 1 - wenn sich der Zeiger am Anfang der Liste befindet.
Beschreibung: Gibt den Index des vorherigen Elements zurück, der vom vorherigen Aufruf () zurückgegeben wurde.
nextIndex
Prototyp: int nextIndex ()
Parameter: NULL
Rückgabetyp:
int - nächster Index
- - 1 - wenn sich der Iterator am Ende der Liste befindet.
Beschreibung: Gibt den nächsten Index des Elements in der Liste zurück. Dieses Element wird durch einen Aufruf der next () -Methode zurückgegeben.
einstellen()
Prototyp: Leerset (E und)
Parameter: e - Element ersetzt werden
Rückgabetyp: NULL
Beschreibung: Wird verwendet, um das letzte Element durch das angegebene Element zu ersetzen. E.
hinzufügen()
Prototyp: void add (E e)
Parameter: e - Element hinzugefügt werden
Rückgabetyp: NULL
Beschreibung: Fügt der Liste neue Elemente an einer Position vor der des next () - Elements hinzu.
Listen-Iterator-Beispiel
Jetzt wissen wir, was ein ListIterator ist und welche verschiedenen Methoden von ihm unterstützt werden. Lassen Sie uns ein Java-Programm implementieren, um den ListIterator zu demonstrieren.
In diesem Programm haben wir ArrayList verwendet. Dann verwenden wir die ListIterator-Methoden, um die Liste sowohl in Vorwärts- als auch in Rückwärtsrichtung zu durchlaufen und die Ausgabe anzuzeigen.
import java.util.*; class Main { public static void main(String args()) { Listnum_list = new ArrayList(); // Add Elements to ArrayList num_list.add(1); num_list.add(3); num_list.add(5); num_list.add(7); num_list.add(9); // Creatinge a ListIterator ListIteratorlist_it = num_list.listIterator(); System.out.println('Output using forward iteration:'); while (list_it.hasNext()) System.out.print(list_it.next()+' ') ; System.out.print('
Output using backward iteration:
') ; while (list_it.hasPrevious()) System.out.print(list_it.previous()+' '); } }
Ausgabe:
Bisher haben wir die Schnittstellen, den Iterator und den Listiterator besprochen. Als nächstes werden wir die verschiedenen Beispiele für die Verwendung dieser Schnittstellen zum Durchlaufen verschiedener Sammlungen sehen. Aber zuerst wollen wir uns mit dem Durchlaufen einfacher Arrays befassen und dann mit anderen Sammlungen fortfahren.
Array-Iterator
In Java gibt es zwei Möglichkeiten, um über Array-Elemente zu iterieren. Beschreiben wir die Möglichkeiten anhand von Codebeispielen.
# 1) für Schleife
Dies ist die einfachste Methode zum Iterieren über ein Array. Wir verwenden eine einfache for-Schleife, die den Index bei jeder Iteration erhöht und dessen Inhalt anzeigt.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for loop:'); for (int i = 0; i Ausgabe:

Das obige Programm zeigt den Inhalt des Arrays mit der for-Schleife an.
# 2) für jede Schleife
Dies ist die zweite Möglichkeit, über Arrays zu iterieren. Hier verwenden wir eine spezialisierte for-Schleife oder eine forEach-Schleife. Hier durchlaufen wir das Array für jedes Element und zeigen dann den Inhalt an.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for each loop:'); for (int i :myArray) { // accessing each element of array num = i; System.out.print(num + ' '); } } }
Ausgabe:

ForEach ist im Vergleich zur for-Schleife optimierter. Es ist kürzer zu tippen und auch schneller.
ArrayList Iterator
Wenn Sie eine ArrayList-Auflistung durchlaufen möchten, können Sie dies über die Iterator-Schnittstelle tun. Da der Iterator eine Schnittstelle ist, können Sie ihn nicht direkt instanziieren. Stattdessen können Sie die iterator () -Methode der ArrayList-Auflistung verwenden, um den Iterator abzurufen und dann die Liste zu durchlaufen.
Iterator iterator ();
Beispiel zur Demonstration des ArrayList-Iterators.
import java.util.*; public class Main { public static void main(String() args) { ArrayListmyList = new ArrayList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); Iteratorlist_it = myList.iterator(); System.out.println('Elements in the arrayList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Ausgabe:

LinkedList Iterator
Lassen Sie uns nun die Funktionalität eines Iterators für den Fall der LinkedList-Sammlung sehen.
Die LinkedList-Auflistung unterstützt die listIterator () -Methode, die den listIterator zurückgibt, um die verknüpfte Liste zu durchlaufen.
Das allgemeine Format für diese Funktion ist
ListIterator list_iter = LinkedList.listIterator (int index);
Hier ist der Index ein ganzzahliger Wert, der die Position in der verknüpften Listensammlung angibt, von der aus das Durchlaufen beginnen soll.
Lassen Sie uns den Listeniterator in der verknüpften Liste mit einem Beispielprogramm verstehen. Wir haben dasselbe Array-Iterator-Programm geändert und es so geändert, dass es einen Listiterator mit der LinkedList enthält.
import java.util.*; public class Main { public static void main(String() args) { LinkedListmyList = new LinkedList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); ListIteratorlist_it = myList.listIterator(0); System.out.println('Elements in the LinkedList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Ausgabe:
Open Source Load Balancer virtuelle Appliance

Java Map / Hashmap Iterator
Karte oder ihre Variationen wie Hashmap, Baumkarte usw. sind keine Sammlungen. Daher können Sie die Iterator-Methode nicht direkt darauf anwenden. Stattdessen sollten Sie die Schlüsseleintragswerte durchlaufen, um die Schlüssel / Wert-Paare zu lesen.
Obwohl Sie verschiedene Methoden wie forEach, for loop usw. verwenden können, um über Kartenwerte zu iterieren, ist die Verwendung eines Iterators zum Durchlaufen der Schlüsselwerte die beste und effizienteste Methode. Darüber hinaus können Sie Einträge während der Iteration mithilfe der Methode remove aus der Karte entfernen.
Beispiel für die Verwendung des Iterators mit HashMap.
import java.util.*; class Main { public static void main(String() arg) { MapmyMap = new HashMap(); // enter name/url pair myMap.put(1, 'India'); myMap.put(2, 'Nepal'); myMap.put(3, 'Maldives'); myMap.put(4, 'SriLanka'); System.out.println(' SAARC Member Countries '); System.out.println(' KEY' + ' ' + ' COUNTRY' ); // using iterators Iteratormap_itr = myMap.entrySet().iterator(); while(map_itr.hasNext()) { Map.Entrymap_entry = map_itr.next(); System.out.println(' ' + map_entry.getKey() + ' ' + map_entry.getValue()); } } }
Ausgabe:

Im obigen Programm haben wir eine Zuordnung mit Ganzzahlschlüsseln und Zeichenfolgentypwerten definiert. Dann definieren wir einen Iterator über der Karte. Geben Sie die Schlüssel / Wert-Paare ein und zeigen Sie sie an.
Java Set Iterator
Die iterator () -Methode von Java.util.set wird verwendet, um den Iterator abzurufen, der die Elemente in der Menge in zufälliger Reihenfolge zurückgibt.
Iterator set_iterator = Set.iterator();
Der 'set_iterator' durchläuft die verschiedenen Elemente der Menge und gibt deren Werte zurück.
In ähnlicher Weise enthält die Hash-Menge auch eine Iteratorfunktion, die einen Iterator wie einen Mengeniterator zurückgibt.
Iterator hashset_iterator = Hash_Set.iterator();
Im Folgenden finden Sie ein Programmierbeispiel zur Demonstration des festgelegten Iterators.
import java.util.*; public class Main { public static void main(String args()) { HashSetsports_set = new HashSet(); sports_set.add('Hocky'); sports_set.add('Kabaddi'); sports_set.add('Football'); sports_set.add('Badminton'); sports_set.add('Cricket'); System.out.println('Sports HashSet: ' + sports_set); // Creating an iterator Iterator hashset_iter = sports_set.iterator(); // Displaying the values after iterating through the set System.out.println('
SportsSet iterator values:'); while (hashset_iter.hasNext()) { System.out.println(hashset_iter.next()); } } }
Ausgabe:

Diese Implementierung verwendet die HashSet-Iterator und zeigt einzelne Werte an, indem die HashSet-Elemente durchlaufen werden.
Iterator vs ListIterator
Lassen Sie uns die Hauptunterschiede zwischen Iterator- und ListIterator-Schnittstellen tabellarisch darstellen.
Iterator ListIterator Kann alle Sammlungen einschließlich Set, Karte usw. durchlaufen. Es kann verwendet werden, um nur Listentypsammlungen wie ArrayList, LinkedList zu durchlaufen. Iteriert die Sammlung nur in Vorwärtsrichtung. Kann die Sammlung sowohl in Vorwärts- als auch in Rückwärtsrichtung durchlaufen. Indizes können nicht abgerufen werden. Kann Indizes erhalten. Keine Möglichkeit, der Sammlung neue Elemente hinzuzufügen. Sie können der Sammlung neue Elemente hinzufügen. Iterator kann die Elemente während der Iteration nicht ändern. ListIterator kann die Elemente in der Auflistung mithilfe der set () -Methode ändern.
Häufig gestellte Fragen
F # 1) Was ist die Iteration in Java?
Antworten: Eine Iteration ist ein Prozess, bei dem ein Codeblock wiederholt ausgeführt wird, bis eine bestimmte Bedingung erfüllt ist oder nicht mehr besteht. Mithilfe der Iteration können Sie eine Folge von Elementen durchlaufen oder die Daten verarbeiten.
F # 2) Wie viele Arten von Iteratoren gibt es in Java?
Antworten: Iteratoren werden verwendet, um die Sammlungen in Java zu durchlaufen.
In Java gibt es drei Arten von Iteratoren:
- Enumeratoren
- Iteratoren
- ListIterators
F # 3) Wie verwende ich einen Iterator in Java?
Antworten: Um den Iterator zum Durchlaufen der Sammlung zu verwenden, müssen Sie zuerst den Iterator mit der iterator () -Methode der angegebenen Sammlung abrufen.
Dann können Sie die Methoden hasNext () und next () des Iterators verwenden, um das Element abzurufen.
F # 4) Warum wird Iterator anstelle der for-Schleife verwendet?
Antworten: Sowohl der Iterator als auch die for-Schleife werden verwendet, um einen bestimmten Codeblock wiederholt auszuführen. Der Hauptunterschied besteht jedoch darin, dass Sie in der for-Schleife den Inhalt der Sammlung nicht ändern oder modifizieren können. Selbst wenn Sie versuchen, es zu ändern, wird concurrentModificationException ausgelöst. Mit dem Iterator können Sie ein Element aus der Sammlung entfernen.
F # 5) Warum brauchen wir Iterator in Java?
Antworten: Mit Iterator können Sie die Elemente in der Sammlung oder einem Container abrufen, ohne dass der Programmierer die interne Struktur oder Funktionsweise der Sammlung kennen muss. Sie sind eleganter, verbrauchen weniger Speicher und der Programmierer wird beim Schreiben von langem Code geschont.
Zweitens können die Elemente auf beliebige Weise in der Sammlung gespeichert werden. Mit einem Iterator kann der Programmierer sie jedoch wie eine Liste oder eine andere Sequenz abrufen.
Fazit
In diesem Lernprogramm haben wir die Iteratoren in Java erläutert, die mit Sammlungen verwendet werden. Dieses Wissen über Iteratoren hilft den Lesern, die Sammlungen zu erfassen, die wir in unseren nachfolgenden Tutorials lernen werden.
Literatur-Empfehlungen
- Java Interface und Abstract Class Tutorial mit Beispielen
- JAVA-Tutorial für Anfänger: Über 100 praktische Java-Video-Tutorials
- Java-Bereitstellung: Erstellung und Ausführung einer Java-JAR-Datei
- Java 'this' Schlüsselwort: Tutorial mit Codebeispielen
- Java Virtual Machine: Wie JVM beim Ausführen von Java-Anwendungen hilft
- Zugriffsmodifikatoren in Java - Tutorial mit Beispielen
- Java Reflection Tutorial mit Beispielen
- C ++ Vs Java: Top 30 Unterschiede zwischen C ++ und Java mit Beispielen