如何在java中使用哈希表进行删除



我不明白这段代码中是否(before==null)Array[position]=e.next;before怎么能等于null?这意味着e==null不是吗?此外,在入口散列中,有C C、V V和下一个入口散列(因此是指向"下一个"入口散列的链接)但如果我们在下一步之前做。下一步=下一步;那么链接不会丢失吗?

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

e是要删除的元素。

它是链表的一部分,因此它可能有一个元素before和一个e.next

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

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

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

before怎么能等于null?这意味着e==null不是吗?

否。e可能是列表的头元素。则while循环永远不会进入,并且before保持为空。

如果我们在before.next=e.next;那林克就不会丢了?

不知道你的意思。e将从列表中删除,但这正是您想要的。如果列表之前是BEFORE => e => NEXT,那么之后将是BEFORE => NEXT

最新更新