7

の JavaDoc からHashMap:

原則として、デフォルトの負荷係数 (.75) は、時間とスペースのコストの間の適切なトレードオフを提供します。値を大きくすると、領域のオーバーヘッドは減少しますが、ルックアップ コストが増加します (get と put を含む HashMap クラスのほとんどの操作に反映されます)。

値が大きい場合、ルックアップ コストが増加するのはなぜですか?

4

5 に答える 5

6

ハッシュ テーブルの負荷率は次のように定義されます。

n/s、格納されたエントリ数 n とテーブルのバケット配列のサイズ s の比率。

衝突の数が少ない場合、ハッシュ テーブルの高いパフォーマンスが維持されます。負荷率が高い場合、同じ数のエントリを格納するために必要なハッシュ バケットの数は少なくなるため、衝突の可能性が高くなります。

于 2012-08-25T12:16:21.657 に答える
2

これは、HashTable が内部でどのように実装されているかに関係しており、ハッシュ コードを使用します。ハッシュ コードを計算するアルゴリズムは完全ではないため、いくつかの衝突が発生する可能性があります。ルックアップのパフォーマンス ...

于 2012-08-25T12:16:03.430 に答える
0

デフォルトの負荷係数 (0.75)。

If declare load factor as
1 the restructuring process only happens when number of elements are exceeding the capacity of the HashMap.
于 2012-08-25T12:17:18.507 に答える
0

負荷係数 0.75 は、式 (n/s、格納されたエントリ数 n とテーブルのバケット配列のサイズ s の比率) を使用してこのように解釈できます。

ハッシュ テーブルに格納する必要がある 75 個の値があり、それらを格納するための 100 個の空の配列ブロックがあるとします。ここでは、衝突の可能性が最小限に抑えられ、負荷係数は 0.75 です。

ここで、格納する値が 75 個あり、空の配列ブロックが 10 個しかない (負荷係数 7.5) とします。これは、衝突が発生し、検索時間が長くなる衝突解決技術を使用することを意味します。

75 個のエントリと 1000 個の空の配列ブロック (負荷係数 0.075) がある場合、多くの空のブロックが発生し、多くのスペースが浪費されます。

したがって経験則では、ロード ファクターの値が大きくなると検索時間が長くなり、0 に近づくほど、より多くのストレージ スペースが浪費されます。

したがって、それは時空のトレードオブです。

于 2016-02-17T16:32:35.350 に答える