質問

初心者なので本当の効果が分かりません 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のを使用するために必要とされるものもありますため、各制御文ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top