Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哈希表中的Remove方法_Java_Hashtable - Fatal编程技术网

Java 哈希表中的Remove方法

Java 哈希表中的Remove方法,java,hashtable,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

嗨,我正在做一个关于哈希表的作业。除了删除方法外,一切都很好。 以下是代码:

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;
    }
}
public boolean remove(K键)抛出HashTableException{
//
//实现这个功能
//
if(key==null)
抛出新的HashTableException(“哈希表中不允许使用空键”);
int index=getIndex(键);
HashTableNode=FindNode(键,索引);
if(node==null){
返回false;
}否则{
if(node.getNext()==null){
node=null;
}否则{
node=node.getNext();
}
返回true;
}
}
它根本不会取下钥匙。有人能帮我吗?谢谢大家!

请确保hashcode()和equals()被正确重写。

节点=null;不“删除”节点,它只是将此方法中变量节点的值设置为null。它对哈希表中某个位置的实际节点不做任何操作

在下一个“else”中,您将得到node=node.getNext();同样,在该方法中只更改节点变量。但是,由于您从方法返回时没有对该变量做任何其他操作,因此,由于node是一个仅存在于该方法中的局部变量,所以所做的一切都是无效的

您应该仔细阅读java中的局部变量和引用的概念,这可能会让您理解为什么这不起作用:)

node=node.getNext()

通过这一行,我认为您只是在遍历,而不是重新编写下一个指针

也许你应该试试node.getPrev().setNext=node.getNext();
如果可以找到上一个节点并能够设置下一个节点。

请确保覆盖用作键的对象的equals和hashcode方法。实际的删除操作在哪里进行?您只需将指针设置为
null
或重新分配它,这不会影响从中获取指针的哈希桶。如果有
返回
,则不需要将代码包装在
else
中。请格式化您的代码。请坚持Java命名约定-方法应该是小写的。我想你有一个带bucket的哈希表。因此,在这种情况下,您应该通过键在bucket中找到根(而不是要删除的元素)元素,然后遍历此链接列表并删除项。这只会更改局部变量,对实际表不做任何操作。这将从链接结构Nope中删除节点。它只会将局部变量节点中的引用更改为链接结构中的下一个节点。它不会改变实际结构。您的意思是node=node.getNext()?对如果你错过了,我在回答中就是这么说的。通过setNext()这意味着,如果您没有获得itHmm,它将更改下一部分的链接,我不确定我昨天读的是否正确。今天我看到你写了getPrev().setNext,对此我很抱歉。哦,真奇怪。你刚才没有编辑这些吗PHi Plux,你说的很有道理。我不是计算机科学专业的学生,只是想学习一些编码技巧。在这个类中,我们有一个表[],它是HashTalbe的数组。我仍然不知道如何实现真正的removeGlad,这很有意义。如果在这个类中提供更多的代码,那么直接建议删除节点的更改可能会更容易。知道数据存储在一个数组中,我可以想出几种不同的实现方法,它们要求您以不同的方式实现remove函数。