我正在尝试为字符串实现两个不同的通用散列函数。但我有一个问题,有时哈希值为 0。有了这个我不能使用哈希函数,因为我想实现双重哈希并且必须实现这个函数: hash_func1(string s) + i * hash_func2(string s)遍历哈希表。但是,如果一个哈希函数为 0,则没有任何变化,我会得到一个无限循环。这是用于哈希表中的冲突检测。我需要两个不同的通用哈希函数来做到这一点。
我尝试了不同的哈希函数,但找不到任何有效的方法。
谁能帮我解决这个问题?
这是我尝试过的一些功能。
int h = 0 , r1 = 31415 , r2 = 27183;
for (int i =0; i < key.length (); i ++) {
h = ( r1 * h + key.charAt ( i )) % capacity ;
r1 = r1 * r2 % (capacity -1);
}
return h ;
或者这个
int seed = 131;
long hash = 0;
for(int i = 0; i < key.length(); i++)
{
hash = (hash * seed) + key.charAt(i);
}
return (int) (hash % capacity);