我正在努力理解散列表中的开放地址方法,但我的文献中没有回答一个问题。这个问题涉及到使用二次探测法删除这样一个哈希表中的元素。然后删除的元素被替换为一个哨兵元素。get()操作就知道它必须继续前进,add()方法将覆盖它找到的第一个哨兵。但是,如果我想要添加一个已经在散列表中且位于探测路径上哨兵后面的键的元素会发生什么?与其覆盖已经在表中具有相同键的实例的值,add()方法将覆盖哨兵。然后,我们在哈希表中有多个具有相同键的元素。我认为这是一个问题,因为它会浪费内存,并且由于从散列表中删除元素只能删除它们中的第一个,因此仍然可以在表中找到该元素(即未被删除)。
因此,在替换哨兵元素之前,似乎有必要搜索整个探测路径以查找要插入的元素的键。我是否忽视了某些东西?这个问题在实践中如何处理?
因此,在替换哨兵元素之前,似乎有必要搜索整个探测路径以查找要插入的元素的键。我是否忽视了某些东西?这个问题在实践中如何处理?