我在这里有此代码,需要对其进行修改。它可以工作,但是由于“哈希”的计算方式很慢。我需要通过不同地编写计算来使其更快。任何想法将不胜感激。我必须立即添加,此代码使用多项式方法,需要将其更改为除法。
private int myhash(Key key)
{
int hash = 7;
String k = (String) key; //here we assume keys are strings.
int base=31;
for (int i = 0; i < k.length(); i++)
hash=(int)Math.round(( Math.pow(31, k.length()-i-1 ))) * k.charAt(i) + hash;
hash=Math.abs(hash) % m;
return hash;
}
答案 0 :(得分:0)
不要假定Key是字符串,因为Java中没有类可以扩展String。也许地图应定义为
Map<String, String>
无需重新发明轮子,因为可以使用string.hashCode()函数调用哈希码。
该实现可以在下面找到,并且可以在JDK源代码中找到。
int h = 0;
if (string.length() > 0)
for (int i = 0; i < string.length(); i++) {
h = 31 * h + string.charAt(i);
}
}
return h;
您的代码似乎计算出另一种哈希值
要进行改进,您可以计算31的幂并将其存储在不同的变量中,并使用它代替昂贵的pow()