【GoLang笔记】遍历map时的key随机化问题及解决方法

Go语言的map使用hashmap实现,遍历顺序与插入顺序不同。在Go 1.4及之后的版本,通过range遍历map时,key的顺序会随机化,这与其他语言如C的hashmap实现不同。当业务依赖key顺序时,需要采取措施解决随机化问题。
摘要由CSDN通过智能技术生成

之前的一篇笔记曾分析过,Go的map在底层是用hashmap实现的。由于高效的hash函数肯定不是对key做顺序散列的,所以,与其它语言实现的hashmap类似,在使用Go语言map过程中,key-value的插入顺序与遍历map时key的访问顺序是不相同的。熟悉hashmap的同学对这个情况应该非常清楚。
所以,本文要提到的肯定不是这个,而是一个比较让人惊奇的情况,下面开始说明。

1. 通过range遍历map时,key的顺序被随机化
在golang 1.4版本中,借助关键字range对Go语言的map做遍历访问时,前后两轮遍历访问到的key的顺序居然是被随机化的
这个现象在其它语言中是很少见的,比如C语言实现hashmap时,通常会用数组(即一段连续的内存空间)来存key,虽然key的分布顺序与插入顺序不一致,但k-v数据填充完毕后,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值