私は、次のなぜHashMapは初期容量が2の累乗であることを要求しますか?
//The default initial capacity - MUST be a power of two.
static final int DEFAULT_INITIAL_CAPACITY = 16;
私の質問を見たとき、私はJavaのHashMapのソースコードを経由して、この要件は、最初の場所に存在しない理由は?私はまた、カスタム容量のHashMapを作成することができますコンストラクタは2の累乗に変換することを参照してください。
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
容量は常に2の累乗でなければならないのはなぜ?
また、自動再ハッシングを実行すると、どういうことが起こりますか?ハッシュ関数も変更されていますか?
まさに私が探していたものです、ありがとうございます。 もう1つの疑問は、すべてのデータを保持しているのに、Entryテーブルが一時的に一時停止していることです。 – Sushant
@Sushant:テーブル内のデータはwriteObject内で*明示的に*シリアル化されているため、すべての空のエントリは書き出されません。フィールドを一時的にすると、通常のシリアライゼーションコードは 'defaultWriteObject'の呼び出しで*書かれて*書き出されなくなります。 –
@JonSkeet h&(length-1)はどのようにネガを扱うのですか?長さ= 16とh = -7と言うことができます – Geek