我正在尝试找到一种方法来使算法更快地执行。该函数当前正在执行的操作是将值(字符)和键(字符串)插入具有7个插槽的哈希表中。它还正在运行检查,以了解A.是否有东西占据其最佳插槽,然后将其放置在最佳可用位置。和B。如果插入了两个相同的密钥,则新密钥只是将其值转移到旧密钥,而不是自己占用一个新的插槽。有没有办法在不迭代我的“键”数组的情况下做到这一点?
public void put(String key, Character val) {
int z = hash(key);
while(keys[z] != null){
if(key.equals(keys[z])){
vals[z]= val;
break;
}
z ++;
if (z>6){
z=0;
if(key.equals(keys[z])){
vals[z]= val;
break;
}
if(keys[0]==null){
break;
}
else{
z++;
}
}
}
keys[z] = key;
vals[z] = val;
N += 1;
}
更新:这是我的hash()函数
public int hash(String key) {
int i;
int v = 0;
for (i = 0; i < key.length(); i++) {
v += key.charAt(i);
}
return v % M;
}
答案 0 :(得分:0)
如果我正确理解了您的代码,那么您就有一个带有线性探测的开放地址哈希表。
线性探测(在您要搜索空位的循环中)的替代方法是:
但是无论如何,最坏的情况是线性的。对于只有7个元素的非常小的表,以1递增的线性方法看起来不错。