#1955·hello-algo

docs: 更新 Go 1.24 后 map 的哈希表实现说明

Author: Gzx-070829Created Aug 14, 2026Updated Aug 14, 2026

问题描述

在「6.2 哈希冲突 → 6.2.3 编程语言的选择」中,目前关于 Go map 的描述为:

Go 采用链式地址。Go 规定每个桶最多存储 8 个键值对,超出容量则连接一个溢出桶;当溢出桶过多时,会执行一次特殊的等量扩容操作,以确保性能。

这一描述对应的是 Go 1.23 及更早版本的 map 实现。

从 Go 1.24 开始,Go 已将内置 map 切换为基于 Swiss Table 的新实现。Swiss Table 属于开放寻址(open addressing)哈希表。

Go 官方博客:

  • Faster Go maps with Swiss Tables

Go 当前 runtime 源码中的 internal/runtime/maps/map.go 也注明:

  • map design is based on Abseil's Swiss Table design
  • 核心结构类似开放寻址哈希表

建议

可以考虑将该段修改为类似:

Go 1.24 起,内置 map 采用基于 Swiss Table 的开放寻址实现;Go 1.23 及更早版本使用桶与溢出桶的实现。

这样既能反映当前实现,也能保留旧版本的历史背景。