为啥墓碑桶可以用来插入?

Posted

技术标签:

【中文标题】为啥墓碑桶可以用来插入?【英文标题】:Why tombstone bucket can be used for insertion?为什么墓碑桶可以用来插入? 【发布时间】:2021-08-11 03:33:57 【问题描述】:

https://research.cs.vt.edu/AVresearch/hashing/deletion.php

上面的网页是这么说的。

“如果在沿着探测序列搜索时遇到墓碑,则搜索过程继续进行搜索。当在插入过程中遇到墓碑时,该槽可用于存储新记录。”

我不太明白为什么第二句话有效。假设三个键 k1、k2、k3 都具有相同的哈希值。通过开放寻址线性探测,它们被插入到哈希表中。哈希表桶看起来像这样。 k1在哈希值指向的位置。

... k1 k2 k3 ...

现在删除 k1。哈希表变为如下,其中 T 表示一个墓碑。

... T k2 k3 ...

然后,我再次插入 k3,它先到达 T,然后使用它,所以我最终在哈希表中有两个 k3。这对我来说没有意义。

... k3 k2 k3 ...

谁能解释一下为什么第二句话有意义?

【问题讨论】:

【参考方案1】:

“然后,我再次插入 k3”

“当在插入过程中遇到墓碑时,可以使用该插槽来存储新记录。” - 这不是一个简单的if-then 规则在bucket-by-期间应用桶迭代;只有在更大的意义上,“插入期间”是指搜索过去的墓碑和现有但不同的元素,直到找到未使用的桶,如果确实到达未使用的桶但看到墓碑,那么只有这样才能你回去覆盖墓碑。

【讨论】:

以上是关于为啥墓碑桶可以用来插入?的主要内容,如果未能解决你的问题,请参考以下文章

HashMap为啥不安全?

1040: 墓碑上的字符

MySql学习之插入删除和更新

为啥HashMap的负载因子是0.75

从没有墓碑和 ttl 的 Cassandra 中删除整个分区?

为啥我可以在未经许可的情况下删除/列出 S3 存储桶中的对象