我有HashMap,我试图根据以下算法删除元素:
来源:https://en.wikipedia.org/wiki/Linear_probing#Deletion
这就是我现在所拥有的,但是看看我的测试,实际上并没有删除。你能帮我弄明白为什么吗?提前致谢
hashFunction()的结果是计算哈希值。
public class MyHashMap {
Person[] array;
public void remove(Person p) {
int i = hashFunction(p);
while (!p.equals(array[i])) {
i = hashFunction(array[++i]);
}
int b;
while (array[i] != null) {
b = hashFunction(array[++i]);
if (b <= hashFunction(array[i])) {
Person newHash = array[i];
array[i] = null;
array[i++] = newHash;
remove(array[i++]);
}
else if (array[++i] == null) {
array[i] = null;
}
}
}
答案 0 :(得分:0)
您的增量后和增量前运营商会为您的问题做出贡献。例如,
array[i] = null;
array[i++] = newHash;
在此,您要将null
分配给array[i]
,然后在newHash
递增之前再次将array[i]
分配给i
。您实际上想要使用++i
而不是i++
。