Javaの 'for each'ループの仕組みは?

検討してみてください。

List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
    System.out.println(item);
}

for each*構文を使わない場合、同等のforループはどのようになるでしょうか。

ソリューション
for (Iterator i = someIterable.iterator(); i.hasNext();) {
    String item = i.next();
    System.out.println(item);
}

ループの中で i.remove(); を使う必要がある場合や、何らかの方法で実際のイテレータにアクセスする必要がある場合、実際のイテレータは単に推論されるだけなので、for ( : ) イディオムは使えないことに注意してください。

Denis Bueno氏が指摘したように、このコードはIterableインターフェイスを実装しているあらゆるオブジェクトで動作します。

また,for (:)イディオムの右辺がIterableオブジェクトではなくarrayである場合,内部コードはint型のインデックスカウンタを使用し,代わりにarray.lengthに対してチェックを行います.Java Language Specification]2を参照してください。

解説 (4)

Javaのfor-eachループは、基本的にイテレータの仕組みを利用しています。つまり、以下のものと同じです。

Iterator iterator = someList.iterator();

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

これに相当する表現を紹介します。

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