关于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回答
我们课上是 16 个桶,两个预留的
mapextra 里面那俩预留的就相当于提前分配了两个 overflow bucket,也就是说,前两个 overflow bucket 生成的时候,直接用这两个就行了,不够用了(nextoverflow == nil 说明不够用了)再 new。
这两个预留的 overflow bucket 不会通过索引来访问的,都是从原来的 bucket 的 overflow 指针链过去的
Xargin
2021-05-30
下面两张图是,有一个溢出桶和三个溢出桶时的情况:
相似问题