You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

线性探测实现的HashMap扩容时是否保留已标记删除的元素

线性探测实现的HashMap扩容对删除标记条目的处理

答案是不会,标记为已删除的条目不会被同步到扩容后的新哈希表中,具体逻辑如下:

  • 你提到的删除时仅做标记(业内通常叫墓碑标记/Tombstone)的设计,只是为了解决原哈希表内删除元素后直接清空槽位导致的线性探测链断裂问题,保证同一条冲突链上后续元素的查找、插入操作能正常执行,这类标记本身不属于需要持久保留的有效数据。
  • HashMap扩容的核心逻辑是对所有有效数据做重哈希:执行扩容时会遍历原哈希表的全部槽位,仅会取出状态为有效、存储了真实键值对的条目,重新计算哈希值后插入到新哈希表的对应位置,所有标记为已删除的墓碑条目会被直接丢弃,完全不会进入新表。
  • 这个处理逻辑刚好还能解决原表运行过程中墓碑积累导致的探测效率下降问题,扩容后的新表没有冗余的删除标记,查找、插入的探测路径长度会回归到最优水平。

举个简单示例:如果原哈希表的槽位依次为 [有效KV: {id:1}, 已删除标记, 有效KV: {id:3}],扩容时只会把两个有效KV重哈希写入新表,中间的删除标记会被直接忽略。

内容的提问来源于stack exchange,提问作者carlosdafield

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:39:02