Apsveriet:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
Kā izskatītos ekvivalents for
cikls, neizmantojot sintaksi for each?
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
Ievērojiet, ka, ja ciklā nepieciešams izmantot i.remove();
vai kā citādi piekļūt faktiskajam iteratoram, nevarat izmantot for ( : )
idiomu, jo faktiskais iterators ir tikai atvasināts.
Kā atzīmēja Denis Bueno, šis kods darbojas ar jebkuru objektu, kas implementē Iterable
interfeisu.
Arī tad, ja for (:)
idiomas labā puse ir array
, nevis Iterable
objekts, iekšējais kods izmanto int indeksa skaitītāju un tā vietā pārbauda array.length
. Sk. Java valodas specifikāciju.
Java lietojumprogrammā for-each cilpa izmanto pamatā esošo iteratora mehānismu. Tātad tas ir identisks šādam:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}