web-dev-qa-db-ja.com

Iterableインターフェースは何に使用されますか?

私は初心者ですが、Iterableインターフェースの実際の効果を理解できません。

37
Johanna

ジェレミーが言ったことに加えて、その主な利点は、独自の構文糖質 拡張されたforループ を持っていることです。たとえば、_Iterable<String>_がある場合は、次のようにできます。

_for (String str : myIterable) {
    ...
}
_

とても簡単ですよね。 _Iterator<String>_を作成し、それがhasNext()であるかどうかをチェックし、str = getNext()を呼び出すというすべての汚い作業は、コンパイラーによってバックグラウンドで処理されます。

また、ほとんどのコレクションはIterableを実装するか、1つを返すビュー(MapkeySet()またはvalues()など)を持っているため、これによりコレクションを操作できますはるかに簡単です。

Iterable Javadoc は、Iterableを実装するクラスの完全なリストを提供します。

46
Michael Myers

ツリーやヘリカルキューなどの複雑なデータセットがある場合(はい、作成しました)気にしない内部的にどのように構成されているか、すべての要素を取得したいだけ1つずつ、イテレータを返すようにします。

問題の複雑なオブジェクトは、ツリーでもキューでも、WombleBasketでもIterableを実装し、Iteratorメソッドを使用してクエリできるイテレーターオブジェクトを返すことができます。

そうすれば、それがhasNext()であるかどうかを尋ねることができ、その場合は、ツリーからどこから取得するかを気にすることなく、next()アイテムを取得できます。

14
Jeremy Smyth

_Java.util.Iterator_を返します。拡張されたforループで実装タイプを使用できるようにするために主に使用されます

_List<Item> list = ...
for (Item i:list) {
 // use i
}
_

内部でコンパイラはlist.iterator()を呼び出し、それを反復してforループ内でiを提供します。

5
Peter Kofler

インターフェースは、中心に、クラスが実装する必要のあるメソッドのリストです。反復可能インターフェースは非常に単純です。実装するメソッドはIterator()の1つだけです。クラスがIterableインターフェースを実装するとき、それは他のクラスにIteratorオブジェクトを取得してオブジェクト内のデータを反復する(つまり、トラバースする)ことができることを伝えています。

4
Matt Bridges

イテレータは基本的に、すべてのコレクションに対する反復を可能にします。

また、Javaのfor-each制御ステートメントを使用するために必要なことでもあります。

3
Zack Marrapese