JavaでのArrayListのStream.builder()を呼び出すと、ストリーム()の違いは何ですか?

グレゴリーPiwowarek:

使用しての間に違いがありStream.builder()作成対ArrayListして、呼び出しstream()それには?

ホルガー:

これは、実装の詳細が、はい、ビルダーは良好含まれる要素の上のストリーミング操作が続く、増分充填されたユースケースに最適化されます。

これとは対照的に、ArrayList任意の修正及びランダムアクセスをサポートする必要があります。

繰り返しに要素を追加するときに、ArrayList正しく予測された初期容量を指定しなくても、それは新しい、より大きな配列を割り当てて、電流容量が消耗している時はいつでもそこに現在の配列をコピーする必要があるかもしれません。

これとは対照的に、ビルダーは、すべての配列を必要としない単一要素の場合、のための特別なサポートがあります。より多くの要素が追加された場合はその後、それがに変わります背骨バッファこのバッファのような小さなアレイで始まるArrayListが、その容量がなくなった場合には、その代わりに繰り返し大きなフラットアレイに配列をコピーする配列の配列を使用し始めます。

だから、これは充填時に、あなたが持っていると思いますコピーのコストを節約できますArrayListあなたはのためにこれらのコストを節約することができますArrayList右の初期容量を指定することではなく、推定値が利用可能である場合にのみが動作します。初期容量を指定すると、空の場合の最適化を削除します。だから、一般的に、ストリームビルダは、はるかに優れた、未知の大きさに対処することができます。

この設計の別の特性は、それがあるStream.Builderとは異なり、より2³¹要素に対処することができArrayListますが、十分なメモリを持っている場合は、。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=445691&siteId=1
おすすめ