1

型を受け入れて返す Java メソッドIterable<T>は非常に一般的です。私が見る問題は、Iteratorインターフェイスが非常に制限されているため、Iterable を使用可能なデータ構造に再構築する必要があるか、ユーザーに Iterable の複数のトラバーサルを実行させて実行時間を増加させることです。

誰かがこれについて私を修正できますか? Iterables は私が思っているほど悪いものですか? Iterables の使用を余儀なくされた場合に、Iterables の制限を回避するために使用できる手法はありますか?

4

3 に答える 3

6

これを受け入れることに関しては、Iterable<T>これは明らかに良いことです。これは、ほぼすべてのデータ構造を渡すことができることを意味します。非常に単純なIterable<T>インターフェイスを実装するだけで済みます。これにより、コードの再利用が容易になります。

利点の1つを返すIterable<T>ことは、メソッドの実装が変更される可能性があることです。おそらく、より効率的なデータ構造を使用するか、要求されたときに結果を遅延生成することによって(たとえば、ディスクからのストリーミング)。Iterable<T>クライアントはインターフェースにのみ依存するため、クライアントを壊すことなく実装を変更するのは簡単です。を公​​開した場合はList<T>、クライアントが順番にデータにアクセスするかどうかを確認できません。

結果に複数回アクセスする必要がある場合は、最初にデータを別の構造にコピーするのが理にかなっています。しかし、あなただけがあなたの特定の状況に最も役立つ特定のコレクションを知っています。時々それはかもしれませんArrayList。また、アイテムをに保存したい場合もありますHashMap。したがって、とにかくデータを新しいデータ構造にコピーしなければならないことがよくあります。

于 2012-05-29T21:01:09.980 に答える
1

また、JDK 8では、インターフェイスが大幅に改善されIterableます。

拡張メソッドの追加により、インターフェイスはデフォルトの実装を提供し、多くの新しい関数が追加されて、ラムダ式を受け入れることができる高階関数と同等のものを提供します。また、反復的な性質のおかげで遅延評価が実装されます。並列性について言及するので、最近流行しています。

于 2012-05-29T21:05:34.223 に答える
1

受け入れることIterable< T >は、クライアントにとって素晴らしいサービスです。

それを返すことは、しばしば彼らにとって不利益です。結果を実装するために使用するコレクションについて考えを変えるつもりがない場合は、できるだけ具体的にする必要があります。

于 2012-05-29T21:08:18.010 に答える