您好我正在处理有关哈希表的任务。一切都很好,除了删除方法。 这是代码:
public boolean remove(K key) throws HashTableException {
//
//IMPLEMENT THIS FUNCTION
//
if (key == null)
throw new HashTableException("Null keys not allowed in the hash table");
int index = getIndex(key);
HashTableNode<K,V> node = FindNode(key,index);
if (node == null) {
return false;
} else {
if (node.getNext() == null) {
node = null;
} else {
node = node.getNext();
}
return true;
}
}
它根本不会删除密钥。有人可以帮我吗?谢谢!
答案 0 :(得分:1)
node = null;不“删除”节点,它只是将此方法中变量节点的值设置为null。它对某个哈希表中的实际节点没有任何作用。
然后在下一个“else”中你有node = node.getNext();这也只是改变了这个方法中的节点变量。但是,由于你从方法返回而没有对这个变量做更多的事情,所以这一切都没有,因为node是一个只存在于这个方法中的局部变量。
你应该阅读java中的局部变量和引用的概念,这可能会导致理解为什么这不起作用:)
答案 1 :(得分:1)
node = node.getNext();
通过这一行,我认为你只是遍历而不是重写下一个指针
也许你应该尝试node.getPrev()。setNext = node.getNext(); 如果你能找到上一个节点并且能够设置下一个节点。
答案 2 :(得分:0)
请确保正确覆盖hashcode()和equals()。