質問
初心者なので本当の効果が分かりません Iterable
インターフェース。
解決
Jeremy が言ったこと以外に、その主な利点は、独自の構文糖衣があることです。の 強化された for ループ. 。たとえば、 Iterable<String>
, 、 できるよ:
for (String str : myIterable) {
...
}
簡単でいいですね。を作成するためのすべての汚い仕事は、 Iterator<String>
, かどうかを確認します hasNext()
, 、そして電話をかけます str = getNext()
コンパイラによってバックグラウンドで処理されます。
そして、ほとんどのコレクションはどちらかを実装しているため、 Iterable
または、それを返すビュー (例: Map
さんの keySet()
または values()
)、これにより、コレクションの操作がはるかに簡単になります。
の Iterable
Javadoc を実装するクラスの完全なリストを提供します Iterable
.
他のヒント
あなたはツリーやらせん状のキューのような複雑なデータセットを、(はい、私はちょうどそれを作った)持っていますが、あなたはをした場合、それが内部的に構造化されますか。を気にしない、あなただけしたいですすべての要素を一つずつ取得し、あなたはそれがイテレータを返すように取得します。
問題の複雑なオブジェクトは、それは木やキューであるか、またはWombleBasketは、反復処理可能を実装し、あなたはイテレータのメソッドを使用して照会することができますイテレータオブジェクトを返すことができます。
それはhasNext()
場合はそのように、あなたはそれを求めることができ、そしてそれがない場合、あなたはどこツリーやどこからそれを得るために心配することなく、next()
アイテムを取得します。
これはjava.util.Iterator
を返します。主に
List<Item> list = ...
for (Item i:list) {
// use i
}
ボンネットの下に、コンパイラは、それはあなたのためにループ内list.iterator()
を与えi
し、繰り返し処理を呼び出します。
インターフェイスは、クラスが実装すべきメソッドのリストは、その心臓部です。反復可能なインターフェイスは非常に簡単です - 実装するための唯一の方法がある:Iterator()
が。クラスはIterable
インタフェースを実装する場合、それはあなたがオブジェクトに(すなわち、トラバース)データを反復処理するために使用するIterator
オブジェクトを取得することができ、他のクラスを語っている。
イテレータ基本的に任意のコレクションの反復処理を可能とします。
これは、Javaのを使用するために必要とされるものもありますため、各制御文ます。