Iteratorを使う
Iteratorが取り出せるほとんどのケースにおいてその持ち主はIterableインターフェースが実装されているので、Iteratorを使わずとも拡張for文でループを回すことができます。
しかし、math3のConbinationsのように、Iteratorのみが構えられたAPIも一部存在するため、
今回は拡張for文を使用せずに、あえてIteratorを使ってループを回してみます。
Iterator<T>
の主要メソッド
メソッド | 機能 |
---|---|
T next() | 次の要素を取り出す |
boolean hasNext() | 今の状態から見て、次の要素を取り出すことができる場合はtrueが返ってくる |
Iteratorは要素を順繰りになぞっていくためのインターフェースです。
next()
メソッドの呼び出しによって要素を取り出すことができます。
「hasNext()
がtrueを返してくる間だけ、next()
を呼び出し続けて処理を行う」というのが一般的な使い方です。
Iteratorは内部状態を持っていて、next()
を使って要素を取り出す毎にその内部状態が変化してゆきます。最後の要素を取り出した直後にはhasNext()
がfalseを返してきます。
Undoや初期状態に戻すようなメソッドは定義されていないため、使い捨て前提のインターフェースです。
(しないと思うけど)Iteratorを自作する場合は気をつけてくださいね。
Iteratorを使ったコード
前置きが長くなってしまいましたがコードです。
while文とfor文の2通りを挙げます。
while文による回し方
Iterator<String> itr = list.iterator();
while(itr.hasNext()){
String str = itr.next();
System.out.println(str);
}
for文による回し方
for(Iterator<String> itr = list.iterator(); itr.hasNext();){
String str = itr.next();
System.out.println(str);
}
個人的には変数のスコープが狭くなってくれるfor文のほうを好んでいます。