雖然要通過Java HashMap
的源代碼,我們可以看到一個鍵的第一桶,採用如下方法確定:容量和indexFor在Java中的Hashmap
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)。
我的問題是,如果表得到調整大小,這個get方法將如何找到正確的桶?
在調整表格大小時,桶會重新構造。 – shmosel
當調整表的大小時,將重新計算和移動鍵的所有散列值。 – 4castle