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
ループはどのようになるでしょうか。
1437
3
ループの中で
i.remove();
を使う必要がある場合や、何らかの方法で実際のイテレータにアクセスする必要がある場合、実際のイテレータは単に推論されるだけなので、for ( : )
イディオムは使えないことに注意してください。Denis Bueno氏が指摘したように、このコードは
Iterable
インターフェイスを実装しているあらゆるオブジェクトで動作します。また,
for (:)
イディオムの右辺がIterable
オブジェクトではなくarray
である場合,内部コードはint型のインデックスカウンタを使用し,代わりにarray.length
に対してチェックを行います.Java Language Specification]2を参照してください。Javaのfor-eachループは、基本的にイテレータの仕組みを利用しています。つまり、以下のものと同じです。
これに相当する表現を紹介します。