【一个无聊问题的答案】golang 中的 map,当元素少于多少时,从数组中顺序查找比 hash 查找还快?

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


如果我定义了 map[key]value,当 key 是 int8, int16, int32, int64, string 等类型时:

是否存在一种可能:当 map 中的元素小于某个边界时,从 map 中查找一个元素,还不如从一个 []type 的数组中查找更快?

以下是我的测试结果。

(元素个数在 边界内,顺序查找快于 hash 查找)

Macos + arm64 + m2, golang 1.26.1

整数类型

数据类型 边界
int8 30
int16 35
int32 28
int64 23

字符串类型

key 长度 边界
8 6
16 5
32 6
64 6
128 8
256 8
512 9
1024 16

Linux + amd64 + Intel(R) Core(TM) Ultra 7 265KF(4.5GHz), golang 1.26.2

整数类型

数据类型 边界
int8 47
int16 56
int32 31
int64 29

字符串类型

key 长度 边界
8 4
16 3
32 3
64 4
128 8
256 8
512 11
1024 17

这能有啥用?

下一步我将优化程序中 key 少于某个边界的 map.