map遍历,为什么startBucket和offset要加个随机数?

map遍历,为什么startBucket和offset要加个随机数?

曹大你好,map遍历,为什么startBucket和offset要加个随机数?理论上从0来时便利不也是一样么?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
Xargin 2021-05-29 23:28:36

Go 的设计者认为 hash 表遍历本身是不保证顺序的(比如扩容的时候,遍历,顺序就会变),所以不希望用户依赖这个顺序


在遍历的时候特意做了随机化,就是为了避免你依赖默认的输出顺序

  • 这个还是不是很懂,正常从hash桶的计算来理解,从0开始或者从随机数开始,都是无法保障顺序输出的

    2021-05-30 11:46:08
  • Xargin 回复 提问者 weixin_慕设计2382076 #2

    你理解的没问题,hash 桶就是没有办法保证逻辑,但是在非扩容期间,你不插新元素,他遍历顺序就是固定的,有的程序员看到这样的输出就认为遍历一直是固定顺序,可能就会对这个顺序产生逻辑依赖

    2021-05-30 16:11:12
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师