如何在java中删除哈希表

时间:2015-04-19 12:14:09

标签: java hashtable

我在这段代码中不理解if(before == null)Array [position] = e.next; 怎么能在等于null之前?这意味着e == null no? 另外,在条目哈希中,有C c,V v和下一个entryhash(所以链接到“下一个”) 但是如果我们之前做的话.next = e.next;那么链接不会丢失吗?

public V delete(C c) { 
    int positionition = indiHash(c); 
    EntryHash<C, V> e = Array[position], before = null; 
    while (e != null && !e.key.equals(c)) { 
        before = e; 
        e = e.next; 
    } 
    if (e == null) return null;
    if (before == null) Array[position] = e.next; 
    else before.next = e.next; 
    size--; 
    return e.value; 
} 

1 个答案:

答案 0 :(得分:0)

e是您要删除的元素。

它是链接列表的一部分,因此它可能包含元素beforee.next

链表头存储在Array[position]中(它是一个数组,因为哈希表中有许多这样的列表,每个哈希桶一个),每个元素都有一个指向{{1}的指针} element。

如果没有next,则before位于链接列表的开头。您可以通过将新列表头指向e(也可以是e.next来删除它,这意味着整个列表现在都是空的。)

如果有null,则必须通过将before指向before.next来修复列表。

  

如何在等于null之前?这意味着e == null no?

没有。有可能e.next是列表的头元素。然后永远不会输入while循环,e保持为空。

  

如果我们在before.next = e.next;然后llink不会丢失?

不确定你的意思。 before将从列表中删除,但这就是您想要的。如果列表之前是e,则会在BEFORE => e => NEXT之后。