golang的map是如何扩容的【重点】

具体内容参考链接
https://zhuanlan.zhihu.com/p/616979764

Golang的map就是使用哈希表作为底层实现,map 实际上就是一个指针,指向hmap结构体。

Go 语言中的 map 在扩容时,会重新分配更大的内存空间,并将原有的键值对重新哈希到新的内存位置。下面是 map 扩容的一般流程:

  1. 当 map 中的元素个数超过了当前容量的时候,Go 语言会触发扩容操作。

  2. Go 语言会分配一个更大的内存空间,新的内存空间的大小通常是当前容量的两倍(具体的扩容策略可能会有一些调整)。

  3. Go 语言会将原有的键值对重新哈希到新的内存位置。这涉及到计算每个键的新哈希值,并将其放入新的哈希桶中。

  4. Go 语言会释放原有的内存空间,并更新 map 的相关属性,例如容量和哈希桶的指针等。

需要注意的是,map 的扩容操作可能会导致一些性能开销,因为它涉及到重新计算哈希值和重新分配内存等操作。因此,在设计程序时,应尽量避免频繁地对大型 map 进行扩容。如果能够预先估计 map 的最大容量,可以在创建 map 时提供一个合适的初始容量,以减少扩容操作的次数,提高性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值