Hashtableクラスに関するJavaのドキュメントから、それは言う
原則として、デフォルトの負荷係数 (.75) は、時間とスペースのコストの適切なトレードオフを提供します。
したがって、Hashtable の負荷係数は 0.75 です。つまり、N 個のキーがある場合、Hashtable は M = N/0.75 のスペースを使用してそれらを格納します。
CLRS ブックでは、ロード ファクター アルファも紹介されています。
しかし、私の理解では、CLRS はアルファを 1 よりも大きく設定することを意図しています。つまり、M = N/アルファ < N です。これは、ハッシュテーブルが M < N の場合に M スロットを使用できることを意味し、未使用のキーからストレージを節約できます。
通常、N の正確な値がわからないため、M < N はストレージを節約できると言いますが、キーのセットはわかっており、N を使用して可能なキーの数を表します。キーのセットは非常に大きいかもしれませんが、実際に使用されるキーの数は非常に少ないです。したがって、M を N より小さく設定すると、ストレージを節約できます。また、これが通常、Hashtable がすべての {key, value} を 1:1 でマップするために直接配列を使用しない理由です。
しかし、Java の Hashtable は N を超えるストレージを使用します。これは CLRS の設計と一致していないと思いますよね?
私は正しいですか?
ありがとう