web-dev-qa-db-ger.com

Verwendung von 'for' in Java

Ich bin relativ neu in Java und habe in einer anderen Stack Overflow-Frage nach for-Schleifen eine Antwort gesagt, dass es zwei Verwendungsmöglichkeiten für in Java gab:

for (int i = 0; i < N; i++) {
}


for (String a : anyIterable) {
}

Ich kenne den ersten Gebrauch von und habe es oft benutzt, aber den zweiten habe ich noch nie gesehen. Was macht es früher und wann würde ich es verwenden? 

23
Josh Curren

Die erste der beiden, die Sie angeben, ist eine klassische C for-Schleife. Dies gibt dem Programmierer die Kontrolle über die Iterationskriterien und ermöglicht drei Operationen: die Initialisierung; der Schleifentest; der inkrementale Ausdruck. Obwohl es häufig verwendet wird, um sich schrittweise für eine bestimmte Anzahl von Versuchen zu wiederholen, wie in Ihrem Beispiel:

for (int i=0; i < N : i++)

Es gibt viele weitere Instanzen im Code, in denen for zum Durchlaufen von Sammlungen verwendet wurde: 

for (Iterator iter = myList.iterator(); iter.hasNext();)

Um das Boilerplating des zweiten Typs (wo die dritte Klausel häufig nicht verwendet wurde) zu vereinfachen, und um die in Java 1.5 eingeführten Generics zu ergänzen, das zweite Ihrer beiden Beispiele - die erweiterte for-Schleife oder for-each loop - wurde vorgestellt. 

Die zweite wird bei Arrays und generischen Sammlungen verwendet. Siehe diese Dokumentation . Sie können damit eine generische Auflistung durchlaufen, in der Sie den Typ von Collection kennen, ohne das Ergebnis von Iterator.next() in einen bekannten Typ umwandeln zu müssen.

Vergleichen Sie:

for(Iterator iter = myList.iterator; iter.hasNext() ; ) {
   String myStr = (String) iter.next();
   //...do something with myStr
}

mit 

for (String myStr : myList) {
   //...do something with myStr
 }

Dieser 'neue Stil' für die Schleife kann auch mit Arrays verwendet werden:

String[] strArray= ...
for (String myStr : strArray) {
   //...do something with myStr
}
37
akf

Die "for in" -Schleife ist meistens eine Augenweide, die den Code lesbarer macht. (Wenn Sie das: als "in" aussprechen).

Ich verwende den zweiten Typ fast ausschließlich in meinem eigenen Code, wenn ich eine Liste oder ein Array durchläuft.

Ich verwende immer noch die reguläre for-Schleife, wenn ich mich hauptsächlich mit mathematischem Code beschäftige oder wenn ich ein "i" brauche, um zu sehen, wie oft ich geschlungen habe.

4
wm_eddie

Es wird verwendet, um ein ganzes Array oder eine Iterable-Collection zu durchlaufen. Im Wesentlichen ersetzt es:

for(int i=0; i<N.length; i++)

Und kann mit Generics verwendet werden, was ziemlich cool ist

1
Paul

Es wird für jede Schleife als a bezeichnet und kann grundsätzlich mit allem verwendet werden, das implementiert wird 

Java.lang.Iterable

Generische Sammlungen implementieren diese Schnittstelle, aber Sie könnten auch eine eigene Klasse erstellen, die dies auch tat. Es macht den Umgang mit allem in einer Liste/Sammlung sehr einfach, der Nachteil ist jedoch, dass Sie nicht wie in der herkömmlichen Schleife explizit auf die aktuelle Nummer in der Liste zugreifen. Aufgrund dieser Aufrufe an die Iterator-Klassen ist dieser Schleifenart wegen herkömmlicher Schleifen mit zusätzlichem Aufwand verbunden.

1
Chris Thompson

Beide sind in der Funktionalität identisch, aber für (String a: anyIterable) {} ist besser lesbar, weniger typisierend und kürzer . für (int i = 0; i <N : i ++) indexiert die Sammlung durch die Schleifensteuervariable i und für (String a: anyIterable) {} indiziert die Sammlung nicht 

0
RoshanS