【发布时间】:2016-05-27 03:57:53
【问题描述】:
我注意到一个包含奇数个特定字符的字符串,比如“b”,其哈希值为
kM+r
其中k 和r 是整数,M 是2 的幂。例如,如果 M 是 2 的幂(比如 16),则在调制 M 后,以下所有字符串都会产生相同的值:
"b" hashCode("b") = 98, 98%16 = 2
"bbb" hashCode("bbb") = 97314, 97314%16 = 2
"bbbbb" hashCode("bbbbb") = 293521890, 293521890%16 = 2
...
如果我使用以下公式 (reference) 来调制哈希值,则上述所有字符串都会哈希到同一个桶中,这绝对是我们想要的不是。
int bucket_id = (hashCode(str) & 0x7fffffff) % M;
我在这里做错了吗?
【问题讨论】:
标签: java hash hashmap hashcode hashset