Wie genau funktioniert eine Enhanced for()loop [Java]?

3 Antworten

(Bitte deklariere neue Variablen klein, das solltest du dir als Neuling angewöhnen, denn sonst gibt das irgendwann mal ein böses erwachen)

Die enhanced Loop ist eine von mehreren Möglichkeiten um ein Iterierbares Objekt oder eine Array zu durchlaufen um dessen Werte abzufragen.

man könnte den Code demnach folgendermaßen erklären:

for (int platzhalter : zahlenArray) {
   System.out.println(platzhalter);
}

Die zahlenArray wird durchlaufen. Bei jedem Durchlauf wird der aktuelle Eintrag in die Variable platzhalter gespeichert. (Und dann per System.out.println ausgegeben)

Warum man nun die enhanced Loop verwendet, ist bei diesem Beispiel eigentlich noch nicht so offensichtlich. Außer vielleicht dass diese leichter lesbar ist, als die klassische for-Schleife:

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

Bei dieser Schleife steht einem innerhalb des Schleifendurchlaufs nämlich nur der aktuelle Index zur Verfügung. Man holt sich erst einen wert aus der Array z.B. via: 

int meineZahl = zahlenArray[i];

Bei einer enhanced Loop hast du generell den Vorteil, du deklarierst bereits im Kopf der Schleife das Objekt, dir bei jedem Durchlauf mit dem aktuellen wert gesetzt direkt zur Verfügung steht. 

Ein anderer Aspekt ist. Geht man von einfachen Arrays weg, sprich Object[], etc. und schaut sich nun Klassen an, die Iterable implementieren:

Darunter fällt z.B. List. Listen haben wie Arrays einen Index, der sich auch mit der normalen for-Schleife abfragen lässt. Allerdings auch z.B. Sets die keinen Index haben. - Hier wäre demnach auch keine Schleife möglich, die sich an einem Index orientiert. D.h. es geht z.B. nur so.

Beispiel: Durchlaufen aller Werte einer Map (Die Werte in einer Map werden als Entry in einem Set gespeichert):

Map<String, String> myMap = new HashMap<>();
myMap.put("A", "Wert1");
myMap.put("B", "Wert2"); for (Map.Entry<String, String> entry : myMap.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue(); }

Hat eine Klasse Iterable implementiert, bedeutet dass, das eine Möglichkeit implementiert wurde, das Objekt nach einer bestimmten Reihenfolge zu durchlaufen. (Wie das durchlaufen im Einzelfall aussieht, hängt von der Implementierung ab)

An der Stelle hoffe ich reicht die Erklärung und ich spare mir jetzt die Erklärung wie man mit einem Iterator ein Iterierbares Objekt durchläuft. 

For(int Platzhalter : zahlenArray){
System.out(Platzhalter);
}

ist nur eine elegantere Schreibweise für

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

  int Platzhalter=zahlenArray[i];

  ,,,,,

}

Intern wird genau diese Code generiert wenn ZahlenArray ein Array ist.

Der Trick geht aber auch mit allen Klassen die das Interface Iterable implementieren- nur wird intern dann ein etwas anderer Code generiert.

Man kann also auf diese Weise z.B. alle Elemente in einer List oder einem Set "abarbeiten"

Also, das Loop wird so oft ausgeführt wie der Datensatz Daten hat, bei jedem ausführen ist die Variable vor dem : der im Moment ausgeführte Datenteil.