2012-03-18 11 views
5

Java Hashtableには、loadFactorを指定できるコンストラクタがあります。しかし、initialCapacity(n)がわかっている場合、loadFactorを指定するポイントは何ですか?Java HashTable LoadFactor

バケットの配列のサイズが一定であると仮定すると、コンストラクタHashtable(int initialCapacity, float loadFactor) はinitialCapacityより大きい容量を持つハッシュテーブルを作成して正しいloadFactor?

+1

負荷係数は、アレイのサイズを変更するタイミングを示します。負荷係数が高いほど、後でサイズを変更し、衝突が増えることを意味します。 –

+3

質問は何を求めているのですか(これは興味深い質問だと思います):実際には 'initialCapacity'を使って最初のサイズを盲目的に使うのですか?もしそうなら、loadFactorが1でなければ 'initialCapacity'値が追加されたときにサイズを変更する必要があるからです。 'initialCapacity'が何個の値が追加されるのかを正確に見積もっていると仮定すると、' initialCapacity'点をサイズ変更せずに追加できるように初期サイズを計算する方が理にかなっていませんか?換言すれば、初期容量は初期*テーブルサイズ*または初期容量*を意味するか? –

+1

@andrewcooke:私はあなたが何を意味するのかを見ていますが、[Javadoc](http://docs.oracle.com/javase/6/docs/api/java/util/Hashtable.html)によると、 "The * capacity *ハッシュテーブルの*バケツ数* "(元のイタリック体)なので、ここには矛盾はありません - たぶん貧しい言葉の選択でしょう。 – ruakh

答えて

6

[…]

この仮定は正しくありません。空でないバケットの割合が最大でloadFactorであることを保証するために、必要に応じてバケットの配列がリサイズされます。

(注:は、初期容量と負荷係数のパラメータは実装のヒントに過ぎないと述べています。再ハッシュメソッドが呼び出されたかどうかの正確な詳細は実装依存です。しかし、これは一般的な行動です。)

2

容量はの初期値であるです。 HashMapは動的構造です。 loadfactorが使用されている初期容量を超えることができます。これは、いつ展開するのかを知るためです。

(あなたはあなたがその初期容量を超過するつもりはありませんしていることを知っている言うことを意味している場合、データ構造は、あなたの意図を占い方法がありません。それは、データ構造ではなく、千里眼AIです;))。バケット(S)のその配列のサイズは、一定であると仮定すると

-1

あなたのテーブルのサイズが正確にわかっている場合は、loadfactorを1にします。このクラスは誰もが書かれています。アレイのサイズを大きくする。