2016-09-13 8 views
2

多くのリストの実装には、コレクションの初期容量を指定するオプションがありますが、これはなぜCopyOnWriteArrayListには許可されていませんか?CopyOnWriteArrayListの初期容量

+0

なぜあなたはそれが必要だと思いますか? –

+0

私は毎回新鮮なコピーを与えるので操作が高価だと知っていますが、前にコンストラクタを注意深く見ていませんでした。この[回答](http://stackoverflow.com/a/39453595/2063026)でも、これは可能ではないと私は考えました。 'CopyOnWriteArrayList'は大規模なコレクションで動作する並列ストリームで使用するには非常に悪い選択です – vsnyc

答えて

7

従来のArrayListでは、後でリストに追加される要素が増えるため、バッキングアレイでより多くの領域を確保するヒントが得られます。

CopyOnWriteArrayListでは、すべての(アトミック)書き込み操作で新しいバッキング配列が作成されます。現在のリストサイズよりも大きい配列を事前に割り当てることには意味がありません。なぜなら、そのスペースは決して使用されないからです。

+0

ありがとう、それは一般的に意味があります。私は、大規模なコレクションを扱う際に、より大きな容量を割り当てることでパフォーマンスをいくらか向上させることを望んでいました。明らかに、これはデータ構造の間違った選択(頻繁な書き込みのために) – vsnyc

+0

*明らかに、これは(頻繁な書き込みのために)使用するデータ構造の間違った選択だろう* - 絶対に正しい! –

関連する問題