Apsvarstykite:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
Kaip atrodytų lygiavertis for
ciklas nenaudojant for each sintaksės?
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
Atkreipkite dėmesį, kad jei cikle reikia naudoti i.remove();
arba kokiu nors būdu pasiekti tikrąjį iteratorių, negalima naudoti for ( : )
idiomos, nes tikrasis iteratorius yra tik numanomas.
Kaip pastebėjo Denis Bueno, šis kodas tinka bet kuriam objektui, kuris įgyvendina Iterable
sąsają.
Be to, jei for (: )
idiomos dešinioji pusė yra ne Iterable
objektas, o array
, vidinis kodas naudoja int indekso skaitiklį ir tikrina pagal array.length
. Žr. Java kalbos specifikaciją.
"Java" ciklas for-each naudoja pagrindinį iteratoriaus mechanizmą. Taigi jis yra identiškas toliau nurodytam:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}