【发布时间】:2018-01-10 08:37:39
【问题描述】:
通过JavaHashMap的源码,我们可以看到key的第一个bucket是通过如下方法确定的:
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) 并且如果生成的密钥 k1 的哈希是 108378 (1 10100111 01011010),那么
indexFor() 方法将返回 10 (1010)。
现在,假设经过一些添加后容量已更改为32。现在,如果我想搜索密钥 k1(哈希为 108378),它将再次使用相同的 indexFor() 方法检查存储桶。现在h & (length-1) 代码 sn-p 将返回26。 (108378 & 31)。
我的问题是,如果表被调整大小,这个 get 方法将如何找到正确的存储桶?
【问题讨论】:
-
调整表大小时,桶会被重组。
-
调整表格大小时,所有键的哈希值都会重新计算并移动。
标签: java hash hashmap hashtable