【发布时间】:2016-03-10 12:40:51
【问题描述】:
例如,对于所有自定义对象= 2(in bits =..10),我们的哈希值都很差。相关帖子中的某处说:“HashMap 使用两个大小的幂,因为您可以通过 hashCode 和 MASK 轻松选择存储桶,其中 MASK = 000....111 其中 1s 的数量 == 当前 2 的幂用于大小。”
因此,对于 map 长度 = 2,我们有 ..10 & 01 = 0 - 大小为 2 时存储桶的索引。
对于 size = 4,我们将有:..010 & 11 = 10(= 2dex) - 4 号的索引。
对于尺寸 = 8,我们将有:..010 & 111 = 10(= 2dex) - 再次用于尺寸 8。
因此,在这种简单的情况下,我们将有 2 个不同的桶用于相同的对象键。(通常,映射方法 hash(int hashCode) 的作用相同 - 它可以为相同的对象哈希生成不同的桶索引 - 取决于映射大小 - 以处理冲突在低位)。当您在地图上执行 get() 时 - 它是否会通过所有适合相同密钥的不同存储桶 - 或不?或者如何跟踪对象哈希所需的所有存储桶?
Why hash method in HashMap
【问题讨论】: