关于map中的extra问题

来源:1-9 神奇的内置数据结构

linxiaoyi

2021-05-30 20:23:07

曹大,课上我们讲到mapextra表示预留的bucket组,

①那么比如bucket1的元素存满的时候是不是优先将新的元素存到预留的bucket中呢?

②是不是当nextoverflow满的时候,才会往bucket1的overflow链一个新的bucket呢?

③如果有数据在mapextra的buckets中,那么当我查询key的时候,我的low bits根据B的大小做&操作,那也就是说肯定无法命中到mapextra的buckets中,那不是废了吗?

④是不是mapextra的bucket也有指向原来的被hash冲突或者说是被low bits命中的那个bucket呢?

?这里有点没理的很清楚。

写回答

2回答

Xargin

2021-05-30

我们课上是 16 个桶,两个预留的


mapextra 里面那俩预留的就相当于提前分配了两个 overflow bucket,也就是说,前两个 overflow bucket 生成的时候,直接用这两个就行了,不够用了(nextoverflow == nil 说明不够用了)再 new。


这两个预留的 overflow bucket 不会通过索引来访问的,都是从原来的 bucket 的 overflow 指针链过去的

1
hinxiaoyi
hp>结合图片理解了!?

h021-05-30
共1条回复

Xargin

2021-05-30

下面两张图是,有一个溢出桶和三个溢出桶时的情况:

http://img.mukewang.com/climg/60b39b5809e29cc546462486.jpg


http://img.mukewang.com/climg/60b39ac809b5bdcb46463108.jpg


1

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程