Möglichkeiten zum Durchlaufen einer Liste in Java

1. Einleitung

Das Durchlaufen der Elemente einer Liste ist eine der häufigsten Aufgaben in einem Programm.

In diesem Tutorial werden wir verschiedene Möglichkeiten untersuchen, dies in Java zu tun. Wir werden uns darauf konzentrieren, die Liste der Reihe nach zu durchlaufen, obwohl es auch einfach ist, umgekehrt vorzugehen.

2. für Schleife

Erstens, lassen Sie uns einige Bewertung für Loop - Optionen.

Beginnen wir mit der Definition einer Liste von Ländern für unsere Beispiele:

List countries = Arrays.asList("Germany", "Panama", "Australia");

2.1. Basic für Loop

Die häufigste Flusssteuerungsanweisung für die Iteration ist die grundlegende for- Schleife.

Die for- Schleife definiert drei Arten von Anweisungen, die durch Semikolons getrennt sind. Die erste Anweisung ist die Initialisierungsanweisung. Der zweite definiert die Beendigungsbedingung. Die letzte Anweisung ist die Update-Klausel.

Hier verwenden wir einfach eine ganzzahlige Variable als Index:

for (int i = 0; i < countries.size(); i++) { System.out.println(countries.get(i)); }

Bei der Initialisierung müssen wir eine Ganzzahlvariable deklarieren, um den Startpunkt anzugeben. Diese Variable fungiert normalerweise als Listenindex.

Die Beendigungsbedingung ist ein Ausdruck, der nach der Auswertung einen Booleschen Wert zurückgibt. Sobald dieser Ausdruck als falsch ausgewertet wird, wird die Schleife beendet.

Die Aktualisierungsklausel wird verwendet, um den aktuellen Status der Indexvariablen zu ändern, zu erhöhen oder zu verringern, bis zum Zeitpunkt der Beendigung.

2.2. Verbessert für Loop

Die erweiterte for- Schleife ist eine einfache Struktur, mit der wir jedes Element einer Liste besuchen können. Es ähnelt dem Basic für die Schleife, ist jedoch lesbarer und kompakter. Folglich ist eine der am häufigsten verwendeten Formen zum Durchlaufen einer Liste.

Beachten Sie, dass die erweiterte for- Schleife einfacher ist als die grundlegende for- Schleife:

for (String country : countries) { System.out.println(country); }

3. Iteratoren

Ein Iterator ist ein Entwurfsmuster, das uns eine Standardschnittstelle zum Durchlaufen einer Datenstruktur bietet, ohne sich um die interne Darstellung kümmern zu müssen.

Diese Art des Durchlaufens von Datenstrukturen bietet viele Vorteile, unter denen wir betonen können, dass unser Code nicht von der Implementierung abhängt.

Daher kann die Struktur ein Binärbaum oder eine doppelt verknüpfte Liste sein, da der Iterator uns von der Art der Durchführung des Durchlaufs abstrahiert. Auf diese Weise können wir Datenstrukturen in unserem Code problemlos ohne unangenehme Probleme ersetzen.

3.1. Iterator

In Java spiegelt sich das Iterator- Muster in der Klasse java.util.Iterator wider . Es ist in Java- Sammlungen weit verbreitet . Es gibt zwei wichtige Verfahren in einem Iterator , die hasNext () und next () Methoden.

Hier demonstrieren wir die Verwendung von beiden:

Iterator countriesIterator = countries.iterator(); while(countriesIterator.hasNext()) { System.out.println(countriesIterator.next()); }

Die Methode hasNext () prüft, ob noch Elemente in der Liste vorhanden sind .

Die next () -Methode gibt das nächste Element in der Iteration zurück .

3.2. ListIterator

Mit einem ListIterator können wir eine Liste von Elementen in Vorwärts- oder Rückwärtsreihenfolge durchlaufen.

Das Scrollen einer Liste mit ListIterator vorwärts folgt einem Mechanismus, der dem vom Iterator verwendeten ähnlich ist . Auf diese Weise können wir den Iterator mit der next () -Methode vorwärts bewegen und das Ende der Liste mit der hasNext () -Methode finden.

Wie wir sehen können, sieht der ListIterator dem zuvor verwendeten Iterator sehr ähnlich :

ListIterator listIterator = countries.listIterator(); while(listIterator.hasNext()) { System.out.println(listIterator.next()); }

4. forEach ()

4.1. Iterable.forEach ()

Seit Java 8 können wir die forEach () -Methode verwenden, um die Elemente einer Liste zu durchlaufen . Diese Methode ist in der Iterable- Schnittstelle definiert und kann Lambda-Ausdrücke als Parameter akzeptieren.

Die Syntax ist ziemlich einfach:

countries.forEach(System.out::println);

Vor der forEach- Funktion waren alle Iteratoren in Java aktiv, dh sie umfassten eine for- oder while-Schleife, die die Datenerfassung durchlief, bis eine bestimmte Bedingung erfüllt war.

Mit der Einführung von forEach als Funktion in der Iterable- Schnittstelle wird allen Klassen, die Iterable implementieren , die forEach- Funktion hinzugefügt.

4.2. Stream.forEach ()

Wir können auch eine Sammlung von Werten in einen Stream konvertieren und auf Vorgänge wie forEach () , map () oder filter () zugreifen .

Hier zeigen wir eine typische Verwendung für Streams:

countries.stream().forEach((c) -> System.out.println(c));

5. Schlussfolgerung

In diesem Artikel haben wir die verschiedenen Möglichkeiten gezeigt, wie Sie mithilfe der Java-API über die Elemente einer Liste iterieren können. Unter diesen haben wir die for- Schleife, die erweiterte for- Schleife, den Iterator , den ListIterator und die forEach () -Methode (in Java 8 enthalten) erwähnt.

Darüber hinaus haben wir gezeigt, wie die forEach () -Methode mit Streams verwendet wird .

Schließlich ist der gesamte in diesem Artikel verwendete Code in unserem Github-Repo verfügbar.