Skip to content

map

哈希表,平均 O(1) 查询,在 Golang 中值得注意 —— 未同步的并发读写不安全

底层原理

不是基于红黑树的实现;从 Go 1.24 开始,内置 map 使用基于 Swiss Table 的哈希表实现——

每个 group 包含 8 个键值槽位和一个 8 字节的 control word,用来快速比较哈希值的部分位,减少对比完整 key 的次数。

如果发生哈希冲突,会通过开放寻址在后续 group 中探测可用槽位,而不是指向旧实现中的 overflow bucket

如果 table 增长到容量上限,会通过替换或拆分 table 完成扩容

基础使用

go
table := make(map[string]int)
table["Tom"] = 114

val, ok := table["Jack"]
fmt.Println(val, ok)

delete(table, "Tom")

for k, v := range table {
    fmt.Println(k, v)
}

遍历的时候,k-v 的顺序未指定,也不保证与前一次遍历相同

Released under the MIT License.