Обмислете:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
Как би изглеждал еквивалентният цикъл for
, без да се използва синтаксисът for each?
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
Обърнете внимание, че ако трябва да използвате i.remove();
в цикъла си или да получите достъп до действителния итератор по някакъв начин, не можете да използвате идиома for ( : )
, тъй като действителният итератор е само изведен.
Както беше отбелязано от Денис Буено, този код работи за всеки обект, който имплементира интерфейса Iterable
.
Също така, ако дясната страна на идиома for (:)
е масив
, а не обект Iterable
, вътрешният код използва брояч на индексите int и вместо това проверява по array.length
. Вижте Спецификация на езика Java.
Цикълът for-each в Java използва основния механизъм на итератора. Така че той е идентичен със следното:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}