Collection<E>はIterable<E>を拡張しており、Iterable<E>はIterator<E>インタフェースを実装したオブジェクトを返すiteratorメソッドを定義している。
若干ややこしいが、ようはCollection<E>の要素を取得しながらループを回すようなケースでは、Collection<E>から事前にiteratorメソッドでイテレーターを取得しておけば、ループを回す処理を共通化して書けますよってこと。
public void sample(Collection coll) { Iterator it = coll.iterator(); // イテレーター取得 while (it.hasNext()) { String str = it.next(); System.out.println(str); it.remove(); } }
こんな感じね。
Iteratorの代表的メソッドは以下。
public boolean hasNext()
要素がまだある場合に、trueを返す。
public E next()
次の要素を返す。次の要素がなければ、実行時例外NoSuchElementExceptionがスローされる。
public void remove()
nextが指す要素を削除する。事前にnextメソッドの実行が必須。nextが呼び出されていないか、next呼びだし後、2回removeを実行したら、実行時例外IllegalStateExceptionがスローされる。