これは基本的にイテレータの仕組みです。この例ではを使用してListいますが、を実装する任意のコレクションに対してイテレータを使用できますjava.lang.Iterable。
List<String> someList; // assume this has been instantiated and has values in it
ListIterator<String> it = someList.listIterator();
while (it.hasNext()) {
String value = it.next();
// do something with value
}
ほとんどの場合、イテレータへの参照を提供するようにコレクションに指示することで、イテレータをインスタンス化します。次に、を呼び出してループしますhasNext()。これにより、要素がなくなるまで続行します。toを呼び出すとnext()、イテレータから次のアイテムがプルされ、その位置が1つ増えます。を呼び出すと、 (または。)によって返された最後のアイテムremove()がリストから削除されます。next()previous()
もちろん、上記の例のように、リストに対して使用するために最適化された特別な実装であるため、java.util.ListIterator代わりに使用していることに注意してください。java.util.IteratorListIteratorIterator
配列に対してイテレータを使用することはできません。Listバニラのforループを使用するか、それをを実装するまたは別のオブジェクトに変換する必要がありますIterable。
上記のリストを際限なくループするには、ループは次のようになります。
while(it.hasNext()) {
String value = it.next();
// do processing
if (!it.hasNext()) {
it = someList.listIterator(); // reset the iterator
}
}
forループを無限に使用して配列をループするには:
for (int i = 0; i < myArray.length; i++) {
myArray[i];
// do something
if (i == myArray.length - 1) {
i = 0; // reset the index
}
}
Numbersまたは、クラスに直接実装させることもできますIterable。