福哥答案2020-11-28:

源码位于runtime/map.go文件中的mapassign函数。

info["name"]="福大大"

bilibili视频里的步骤:[答案来自此链接](https://www.bilibili.com/video/BV1Nr4y1w7aa?p=11)
3.结合哈希因子和键name生成哈希值。
5.获取哈希值的后B位,并根据后B位的值来决定将此键值对存放到哪个桶中(bmap)。
6.在上一步确定桶之后,接下来就在同种写入数据。
获取哈希值的tophash(即:哈希值的`高8位`),将tophash、key、value分别写入到桶中的上数组中。
如果桶已满,则通过overflow找到溢出桶,并在溢出桶中继续写入。
注意:以后再桶中查找数据时,会基于tophash来找(tophash相同则再去比较key)。
7.hmap的个数count++(map中的元素个数+1)。

看源码新增了一些步骤,忽略扩容:
1.如果map为nil,抛panic。
2.如果flags是【正在写】状态,抛throw。
3.结合哈希因子和键name生成哈希值。
4.修改flags为【正在写】状态。
5.获取哈希值的后B位,并根据后B位的值来决定将此键值对存放到哪个桶中(bmap)。
6.在上一步确定桶之后,接下来就在同种写入数据。
获取哈希值的tophash(即:哈希值的`高8位`),将tophash、key、value分别写入到桶中的上数组中。
如果桶已满,则通过overflow找到溢出桶,并在溢出桶中继续写入。
注意:以后再桶中查找数据时,会基于tophash来找(tophash相同则再去比较key)。
7.hmap的个数count++(map中的元素个数+1)。
8.如果flags不处于【正在写】状态,说明是并发写,抛throw。
9.修改flags,取消【正在写】状态。
10.返回新设置的元素。

2020-11-28:go中,map的写流程是什么?的更多相关文章

  1. 【2020.11.28提高组模拟】T1染色(color)

    [2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...

  2. [18/11/28]Java中的包(package)

    一.为何引入包? 包机制是Java中管理类的重要手段. 开发中,我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理. 包对于类,相当于文件夹对于文件的作用.(同一文件 ...

  3. 【2020.11.28提高组模拟】T2 序列(array)

    序列(array) 题目描述 ​给定一个长为 \(m\) 的序列 \(a\). 有一个长为 \(m\) 的序列 \(b\),需满足 \(0\leq b_i \leq n\),\(\sum_{i=1}^ ...

  4. JZOJ 6904. 【2020.11.28提高组模拟】T3 树上询问(query)

    题目 你有一棵 \(n\) 节点的树 ,回答 \(m\) 个询问,每次询问给你两个整数 \(l,r\) ,问存在多少个整数 \(k\) 使得从 \(l\) 沿着 \(l \to r\) 的简单路径走 ...

  5. c++map按value排序--将map的pair对保存到vector中,然后写比较仿函数+sort完成排序过程。

    map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行 ...

  6. 11 在C#中写文件

    在这个练习中,我们来学习如何把我们想要的东西写到文件中.我们在这个练习中还是使用File类中的方法来完成写文件的操作. 在这个练习中我们要用C#创建一个纯文本文件ex11.txt 放到c盘的Exerc ...

  7. STL中map与hash_map容器的选择收藏

    这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...

  8. java中map和对象互转工具类的实现示例

    在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map ...

  9. 浅谈c++中map插入数据的用法

    map:数据的插入 在构造map容器后,我们就可以往里面插入数据了.这里讲三种插入数据的方法:第一种:用insert函数插入pair数据 map<int, string> mapStude ...

  10. C++中的STL中map用法详解(转)

    原文地址: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html C++中的STL中map用法详解   Map是STL的一个关联容器,它提供 ...

随机推荐

  1. element表格数据v-for替换期望文字

    后端返回等级编码 "1","2"....并给你一个字典obj[ {dicCode: "4", dictFlag: "riskLev ...

  2. Jquery中,$(this)的少许获取问题

    这是原始代码,结果为解禁提示框中$(this)获取不到当前元素. 如上图,在提示方法外面声明一下$(this)并赋给$this,下面调用$this,即可获取当前元素.

  3. SAP BADI总结

    SAP里标准拼法是BAdI,区分大小写.太麻烦,文章里全用大写. BADI技术的底层是接口,类等面向对象开发的内容. Classic BADI是一个BADI包了一个接口.实现它的话,需要一个接口的实现 ...

  4. group by和union,Laravel分页

    $res3 = DB::table('users') ->join('user_folow_boutiques', 'user_folow_boutiques.user_id', '=', 'u ...

  5. What is UDS Service 0x10 - Diagnostic Session Control ?

    Why need the UDS Service 0x10? ECU在正常工作时会处于某一个会话模式下,上电后会自动进入默认会话模式,所以ECU启动后我们不需要输入0x10 01来进入该会话模式.EC ...

  6. NET 8 预览版 2 亮点是Blazor

    .NET 团队在2023年3月14日发布了.NET 8预览版2,博客文章地址:https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-pre ...

  7. Collection单列集合总结

    这篇文章记录了Collection集合,List集合,Set集合 在文章第七点总结了两大系列集合的五种实现类的区别,有需要的小伙伴可以直接去查看 一.什么是集合 集合是Java中存储对象数据的一种容器 ...

  8. 推荐三款 Mac 上的理财神器 iCompta、Rublik、UctoX

    今天推荐三款理财神器,像个人的话可以使用 iCompta(个人财务管理)一款软件就好了,但有些朋友可能有关注汇率的需求,可以使用 Rublik(汇率动态),还有一些小伙伴可能有自己的公司等原因财务量较 ...

  9. 记一次在forEach中使用aynac/await中的坑

    1.背景 在写一个对齐脚本时 发现下列问题 const timeList = await imageList.map( (item,index)=>{ return item.identify_ ...

  10. ArcGIS倾斜摄影无法加载找不到nodes节点

    倾斜摄影无法加载,在fiddler请求中,nodes/root请求失败,如:http://10.0.7.173:6080/arcgis/rest/services/Hosted/xm4490/Scen ...