Hvordan fungerer Java 'for each' loop?

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?

Løsning
for (Iterator 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.

Kommentarer (4)

For-each-loopet i Java bruger den underliggende iteratormekanisme. Så det er identisk med følgende:

Iterator iterator = someList.iterator();

while (iterator.hasNext()) {
  String item = iterator.next();
  System.out.println(item);
}
Kommentarer (0)

Her er et tilsvarende udtryk.

for(Iterator sit = someList.iterator(); sit.hasNext(); ) {
    System.out.println(sit.next());
}
Kommentarer (0)