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ötigen | Verwenden Sie |
|---|---|
| Index (oder Schrittweite oder Rückwärts) | klassische for-Schleife |
| Nur die Werte der Reihe nach | erweiterte for-Schleife |
sum/avg/min/max/filter auf Zahlen | Arrays.stream(...) |
| Array in ein neues transformieren | klassische for-Schleife oder Stream + toArray |
| Array direkt verändern | klassische for-Schleife |
Ein ausgearbeitetes Beispiel
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.