私は初心者ですが、Iterable
インターフェースの実際の効果を理解できません。
ジェレミーが言ったことに加えて、その主な利点は、独自の構文糖質 拡張されたforループ を持っていることです。たとえば、_Iterable<String>
_がある場合は、次のようにできます。
_for (String str : myIterable) {
...
}
_
とても簡単ですよね。 _Iterator<String>
_を作成し、それがhasNext()
であるかどうかをチェックし、str = getNext()
を呼び出すというすべての汚い作業は、コンパイラーによってバックグラウンドで処理されます。
また、ほとんどのコレクションはIterable
を実装するか、1つを返すビュー(Map
のkeySet()
またはvalues()
など)を持っているため、これによりコレクションを操作できますはるかに簡単です。
Iterable
Javadoc は、Iterable
を実装するクラスの完全なリストを提供します。
ツリーやヘリカルキューなどの複雑なデータセットがある場合(はい、作成しました)気にしない内部的にどのように構成されているか、すべての要素を取得したいだけ1つずつ、イテレータを返すようにします。
問題の複雑なオブジェクトは、ツリーでもキューでも、WombleBasketでもIterableを実装し、Iteratorメソッドを使用してクエリできるイテレーターオブジェクトを返すことができます。
そうすれば、それがhasNext()
であるかどうかを尋ねることができ、その場合は、ツリーからどこから取得するかを気にすることなく、next()
アイテムを取得できます。
_Java.util.Iterator
_を返します。拡張されたforループで実装タイプを使用できるようにするために主に使用されます
_List<Item> list = ...
for (Item i:list) {
// use i
}
_
内部でコンパイラはlist.iterator()
を呼び出し、それを反復してforループ内でi
を提供します。
インターフェースは、中心に、クラスが実装する必要のあるメソッドのリストです。反復可能インターフェースは非常に単純です。実装するメソッドはIterator()
の1つだけです。クラスがIterable
インターフェースを実装するとき、それは他のクラスにIterator
オブジェクトを取得してオブジェクト内のデータを反復する(つまり、トラバースする)ことができることを伝えています。
イテレータは基本的に、すべてのコレクションに対する反復を可能にします。
また、Javaのfor-each制御ステートメントを使用するために必要なことでもあります。