のJava HashMap
のソースコードを通過する間に、我々はキーの最初のバケットは以下のような方法で決定されて見ることができます。私の理解あたりとして容量とJavaのHashMapでindexFor
static int indexFor(int h, int length) { //h = hash of key
return h & (length-1); //length = capacity of array at
} // current time
初期サイズであれば16
(length-1 = 15 = 1111)であり、キーの生成ハッシュが108378
(1 10100111 01011010)の場合、 indexFor()
メソッドは10
(1010)を返します。
今や、いくつかの追加の後、容量が32
に変更されました。ここでキー(ハッシュ108378)を検索する場合は、同じindexFor()
メソッドのバケットを再度チェックします。 h & (length-1)
コードスニペットは26
を返します。 (108378 & 31)。
私の質問は、テーブルがサイズ変更された場合、メソッドが正しいバケットを見つける方法ですか?
テーブルのサイズを変更すると、バケットが再構成されます。 – shmosel
テーブルのサイズを変更すると、キーのすべてのハッシュ値が再計算され、移動されます。 – 4castle