5

内部再構築の必要性を防ぐために、1000 個の整数を挿入することがわかっている HashSet には、どの初期容量を使用すればよいですか?

最初は 1000 を使用する必要があると思いましたが、initialCapacity パラメーターを使用するコンストラクターの説明を読むと、Constructs a new, empty set; the backing HashMap instance has the specified initial capacity and default load factor (0.75)..

容量を 1000 に設定すると、750 要素に達すると hashMap のサイズが変更されますか?

また、hashMap の有効性にはある程度の「スペース」が必要であると想定しているため、IC*0.75=1000 を解いて 1334 のようなものを取得することも最善の解決策ではない可能性がありますか?

更新:
1) 内部のサイズ変更の影響は重要ではありませんが、使用している環境を学び、理解を深めるチャンスであることは承知しています。労力は最小限に抑える必要があります。

2) データ構造の選択に関していくつかのコメントがありました。ここで私の以前の Q を見てください:私のシナリオに関するより正確な情報が提供されているデータ構造の推奨事項。

4

4 に答える 4

2

これについて本当に心配する価値がある場合 (そして、1000 個の整数のセットのサイズを変更するのに時間がかからないのではないかと思います)、HashSetが a によってサポートされてHashMapおり、putメソッドがthisを参照していることに注意してください。

addEntry(int hash, K key, V value, int bucketIndex) {

   Entry<K,V> e = table[bucketIndex];

   table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
   if (size++ >= threshold)
      resize(2 * table.length);
}

そのようなクエリのソース コードを確認することは常に価値がありますが、実装は常に変更される可能性があることに注意してください (マイナーJRE リリースであっても)。

最後に、このシナリオに適したセットはありますか? 固定サイズの整数割り当てがある場合、おそらく単純な配列 (プリミティブを使用してボクシングを回避する) の方が高速/単純でしょうか?

于 2013-08-19T08:05:06.970 に答える