主题
哈希进阶:开放定址、扩容策略与工程实现
1. 基础哈希表讲完后,为什么还不够
基础章已经回答了两个问题:
- 哈希表为什么平均查找快。
- 拉链法为什么能处理冲突。
但如果想真正理解工程级哈希表,还需要继续往下追:
- 为什么有些实现不用链表,而用开放定址?
- 删除为什么会比插入更微妙?
- 扩容为什么不能简单粗暴地“一次性全搬”?
- 一致性哈希为什么被分布式系统反复使用?
这些问题共同决定了哈希表从“课堂结构”走向“系统部件”的质量。
2. 开放定址:把元素直接放在桶数组里
开放定址法不再让每个桶挂链表,而是要求元素本身就落在桶数组中。冲突时,按照某种探测规则寻找下一个可用槽位。
开放定址的优点:
- 内存布局更紧凑。
- 缓存局部性通常更好。
- 不需要每个桶再持有链式节点对象。
缺点:
- 删除更麻烦。
- 高装载因子下性能下降更明显。
- 探测策略不好时容易形成聚集。
