Go-map底层实现

 

 

 

 map主要由连个数据结构实现,hmap+bmap,hmap是map的整体描述信息,相当于头节点,包含了bmap的地址,bmap是真正存储数据的地方,一个bucket可以存8个k-v,当超过8个k-v后,会用拉链法生成溢出bucket,bmap本身是连续的内存数组。

查找过程:先根据hash函数和hash0计算出hash值,用hash值的低位与B做与运算,(其实就是%操作,由于B存的是log2(bmap的长度),所以可以用n & (m-1),算出bmap的下标,然后在比较高位,如果高位相同,再比较key,一个bucket遍历完后,在沿着拉链表遍历。

posted @ 2022-03-08 15:21  hugeQAQ  阅读(56)  评论(0编辑  收藏  举报