2017-02-26 5 views
-2

であり、どちらもコンシューマをパラメータとして取得します。ですから、Java 8がTime APIのように混乱を避けるためのものであれば、なぜ新しい混乱を招いたのでしょうか?または私はいくつかのポイントを逃している?Iterator.forEachRemaining()とIterable.forEach()の両方を持つ点は何ですか?

+1

'Iterator'と' Iterable'を比較しようとしていますか? http://stackoverflow.com/questions/6863182/what-is-the-difference-between-iterator-and-iterable-and-how-to-use-them – nullpointer

+1

どのように混乱しますか?それらは2つの異なるインターフェースであり、メソッドの名前は彼らが何をするかをはっきりと示しています。 –

+1

@JBNizetすべての人、私にトマトを投げないでください!私はそれを得た:D –

答えて

13

2つの方法が両方とも存在する理由を理解するには、まずIteratorIterableが何であるかを理解する必要があります。

Iteratorは、基本的には「次の要素」を持ち、通常は終わりです。

Iterableは、有限または無限のシーケンスの要素を含むものであるため、は、次の要素を取得し続けることによってを反復することができます。つまり、Iterable秒はIterator秒まで繰り返すことができます。

これを理解したので、問題の2つの方法の違いを教えてください。

例としてアレイリストを使用しましょう。これは、配列リストの内側にあるものです:今、私はIterable.forEach()を呼び出し、System.out::print()に渡した場合、13680が印刷されます

[1, 3, 6, 8, 0] 

。これは、Iterable.forEachが要素のシーケンス全体を反復処理するためです。一方

、私は配列リストのIteratorを取得し、System.out::print()forEachRemainingを呼び出す前に、680が印刷されますが、二回nextを呼び出した場合。 Iteratorはすでに最初の2つの要素を反復しているので、残りのものは6,8および0です。

+0

大丈夫。あなたの明確で完全な答えに感謝します。 –

関連する問題