我在这段代码中不理解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;
}
答案 0 :(得分:0)
e
是您要删除的元素。
它是链接列表的一部分,因此它可能包含元素before
和e.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
之后。