如何在初始化映射时设置容量可以防止重新散列


s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
capacity := len(s)
m := make(map[int]bool, capacity)
for _, n := range s {
m[n] = true
}

地图会在for循环中重新散列吗?或者容量应该乘以一个系数以防止再次灰化,比如:

capacity := len(s) * 1.3

您不需要因子。规格:制作切片、地图和元素:

使用映射类型和大小提示n调用make将创建一个具有初始空间的映射,以容纳n映射元素。精确的行为取决于实现。

也来自内置make():的文档

映射:一个空映射被分配了足够的空间来容纳指定数量的元素。在这种情况下,可以省略尺寸分配了较小的起始大小。

此代码是最优化的,只要s的值小于capacity,就不需要更改

最新更新