Overvej:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
Hvordan ville den tilsvarende for
-sløjfe se ud uden at bruge syntaksen for each?
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
Bemærk, at hvis du skal bruge i.remove();
i din løkke eller få adgang til den faktiske iterator på en eller anden måde, kan du ikke bruge for ( : )
-idiomet, da den faktiske iterator blot er udledt.
Som Denis Bueno har bemærket, fungerer denne kode for ethvert objekt, der implementerer Iterable
-interfacet.
Hvis den højre side af for (:)
-idiomet er et array
i stedet for et Iterable
-objekt, bruger den interne kode også en int-indextæller og kontrollerer i stedet array.length
. Se Java Language Specification.
For-each-loopet i Java bruger den underliggende iteratormekanisme. Så det er identisk med følgende:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}