【发布时间】:2011-11-17 23:57:33
【问题描述】:
我试图理解哈希表中的开放寻址,但我的文献中没有回答一个问题。如果使用二次探测,它涉及删除此类哈希表中的元素。然后被移除的元素被一个哨兵元素替换。然后 get() 操作知道它必须走得更远,并且 add() 方法将覆盖它找到的第一个哨兵。但是,如果我想添加一个键已经在哈希表中但在探测路径中的哨兵后面的元素,会发生什么? add() 方法不会用表中已有的相同键覆盖实例的值,而是覆盖哨兵。然后我们在哈希表中有多个具有相同键的元素。我认为这是一个问题,因为它会消耗内存,而且从哈希表中删除元素只会删除其中的第一个,因此仍然可以在表中找到该元素(即它不会被删除)。
因此,在替换哨兵元素之前,似乎有必要在整个探测路径中搜索想要插入的元素的键。我忽略了什么吗?这个问题在实践中是如何处理的?
【问题讨论】:
标签: hashtable