关于Map遍历顺序十分奇怪的问题

Hahahahx · 2020-11-11 16:08:25 · 2292 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2020-11-11 16:08:25 的主题,其中的信息可能已经有所发展或是发生改变。

Go中是不是Map是没有顺序一说的,为什么我在用for打印map里的元素的时候打印的顺序会发生变化呢

如图,mapList map[string]int 中{"one":1,"two":3,"ten":10}; 在我遍历打印的时候,结果可能是 1-3-10,应该说一般都是1-3-10 但是一旦我加快对当前map的打印速度,比如连续的遍历两次,这时候打印出的结果就有可能发生变化了

第二次的结果就有可能是3-1-10或者10-1-3 想知道这是为什么,为什么我在频繁打印map的时候,顺序就变得奇怪了呢。

image.png

image.png


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2292 次点击  
加入收藏 微博
4 回复  |  直到 2020-11-19 10:45:03
__Golang__
__Golang__ · #1 · 4年之前

遍历的起始节点是随机的,所以几次输出不一致

GotoLove-LoonGL
GotoLove-LoonGL · #2 · 4年之前

Map是一种无序的键值对的集合

wuchenghui
wuchenghui · #3 · 4年之前

开发者故意让map遍历无序的

mikegit2014
mikegit2014 · #4 · 4年之前

map是一种hash表实现,因此map遍历顺序是不固定的 每次遍历的顺序都可能不一样。Golang会提前取一个随机数,把桶的遍历顺序随机化。 map还有一点就是非线程安全,因此在并发的情况下,不能使用map,而应该使用sync.map

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传