W3docs

Java-Arrays mit Schleifen durchlaufen

Java-Arrays mit klassischer for-Schleife, erweiterter for-each-Schleife und Streams iterieren – Übersicht und Vergleich.

array[0], array[1], array[2] manuell zu lesen hört auf zu skalieren, sobald die Länge 3 überschreitet. Nachdem Sie ein Array erstellt haben, bietet Java mehrere Möglichkeiten, jedes Element zu besuchen — wählen Sie die, die zu Ihrem tatsächlichen Bedarf passt. Diese Seite behandelt die indexbasierte for-Schleife, die erweiterte for-Schleife (for-each), Array-Streams und wie Sie zwischen ihnen wählen.

Die klassische for-Schleife

Die indexbasierte for-Schleife ist die flexibelste Form und die einzige, die Ihnen die aktuelle Position liefert:

int[] scores = {90, 85, 73, 100, 62};
for (int i = 0; i < scores.length; i++) {
  System.out.println(i + ": " + scores[i]);
}

Verwenden Sie diese, wenn Sie Folgendes benötigen:

  • den Index (zum Ausgeben, zum Vergleichen benachbarter Elemente, zum Überspringen)
  • das Array rückwärts durchlaufen — for (int i = scores.length - 1; i >= 0; i--)
  • in Schritten größer als eins vorzugehen — i += 2
  • das Array zu verändern — Zuweisung an scores[i]

Die Bedingung lautet immer i < array.length, niemals eine fest kodierte Zahl. Wenn sich die Arraygröße später ändert (oder das Array von woanders übergeben wird), funktioniert die Schleife weiterhin.

length ist ein Feld, daher gibt es keine Klammern: Schreiben Sie scores.length, nicht scores.length(). (Strings sind anders — String hat eine length()-Methode.) Wenn das Array leer ist, ist length gleich 0 und der Schleifenrumpf wird nie ausgeführt — genau das, was Sie wollen, ohne eine spezielle Prüfung. Siehe das for-Schleifenkapitel für die allgemeinen Mechanismen.

Die erweiterte for-Schleife — „for-each"

Wenn Sie nur den Wert jedes Elements der Reihe nach benötigen, ist die erweiterte for-Schleife kürzer und klarer:

int[] scores = {90, 85, 73, 100, 62};
int sum = 0;
for (int score : scores) {
  sum += score;
}
System.out.println("sum = " + sum);

Lesen Sie den Doppelpunkt als „in": „für jedes int score in scores." Die Schleifenvariable ist eine frische Kopie jedes Elements. Sie können den Index auf diese Weise nicht ermitteln, und Sie können das Array nicht über score verändern — eine Zuweisung an score bindet nur die lokale Variable neu.

Verwenden Sie die erweiterte for-Schleife für „etwas mit jedem Wert tun". Verwenden Sie die klassische for-Schleife, wenn der Index wichtig ist.

Lesen vs. Schreiben innerhalb einer Schleife

Innerhalb einer klassischen for-Schleife verändert array[i] = newValue das Array direkt:

int[] scores = {90, 85, 73, 100, 62};
for (int i = 0; i < scores.length; i++) {
  scores[i] = scores[i] + 5;     // give everyone a 5-point bonus
}

Die erweiterte for-Schleife kann dies bei primitiven Typen nicht — score = score + 5 ändert nur die lokale Kopie:

for (int score : scores) {
  score = score + 5;             // no effect on scores
}

Bei Arrays von Objekten referenziert die Schleifenvariable weiterhin dasselbe Objekt wie der Array-Slot. Daher wirken sich mutierende Methoden auf das aus, was das Array sieht. Eine Neuzuweisung der Variable hingegen nicht.

Streams über Arrays

Für numerische Arrays bietet der Arrays.stream(...)-Helfer eine Pipeline-ähnliche API:

import java.util.Arrays;

int[] scores = {90, 85, 73, 100, 62};
int total = Arrays.stream(scores).sum();
double avg  = Arrays.stream(scores).average().orElse(0);
int max     = Arrays.stream(scores).max().orElse(0);

Für Objekt-Arrays gibt Arrays.stream(...) ein Stream<T> mit den üblichen Methoden filter/map/reduce zurück:

String[] names = {"Ada", "Linus", "Grace"};
long shortOnes = Arrays.stream(names).filter(n -> n.length() <= 3).count();

Streams sind ausdrucksstark, aber nicht kostenlos — bei engen inneren Schleifen ist eine einfache for-Schleife schneller und einfacher zu debuggen. Greifen Sie auf Streams zurück, wenn die Absicht (Summe, Filtern-dann-Zählen, Gruppieren, Transformieren) deutlich gemacht werden soll. Siehe Java-Streams für die vollständige Pipeline-API.

forEach von der Array-Seite

Es gibt kein array.forEach(...). Die nächsten Entsprechungen sind Arrays.stream(arr).forEach(...) (numerisch oder Objekt) oder, für Objekt-Arrays, die Abkürzung Arrays.asList(arr).forEach(...). Meistens reicht die einfache for- oder die erweiterte for-Schleife aus — greifen Sie nicht nach forEach nur um einer anderen Syntax willen.

Eine Schleife wählen

Sie benötigenVerwenden Sie
Index (oder Schrittweite oder Rückwärts)klassische for-Schleife
Nur die Werte der Reihe nacherweiterte for-Schleife
sum/avg/min/max/filter auf ZahlenArrays.stream(...)
Array in ein neues transformierenklassische for-Schleife oder Stream + toArray
Array direkt verändernklassische for-Schleife

Ein ausgearbeitetes Beispiel

java— editable, runs on the server

Was kommt als Nächstes

Sie können jetzt Arrays erstellen und in jede Richtung durchlaufen. Reale Daten sind oft zweidimensional — ein Raster, eine Tabelle, ein Spielfeld — und Java unterstützt dies mit mehrdimensionalen Arrays, die eigentlich Arrays von Arrays sind.

Übungen

Übung
Welche Schleife sollten Sie verwenden, wenn Sie den Index jedes Elements benötigen?
Welche Schleife sollten Sie verwenden, wenn Sie den Index jedes Elements benötigen?
Was this page helpful?