删除HashTable中的方法

时间:2013-10-23 07:35:43

标签: java hashtable

您好我正在处理有关哈希表的任务。一切都很好,除了删除方法。 这是代码:

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;
    }
}

它根本不会删除密钥。有人可以帮我吗?谢谢!

3 个答案:

答案 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()。