【发布时间】:2017-05-04 08:56:49
【问题描述】:
假设哈希表是一个索引为 0 到 HASHSIZE-1 的数组。该函数返回一个正确范围内的值,并且不会产生任何运行时错误。假设传入的 String 至少有 2 个字符。为什么它是一个糟糕的哈希函数?
public static int hash(String key) {
return (key.charAt(0)
+ key.charAt(1)
+ key.charAt(key.length()-1) % HASHSIZE;
}
【问题讨论】:
-
看来会有很多碰撞,很差。
-
检查分布
-
它似乎也忽略了大部分字符串的内容,这有点没用。
-
为什么不使用 String.hashCode() ?
-
这也会在小字符串上引发 IndexOutOfBoundsException。