go语言中的map底层原理分析
map 是一种key-value的键值对存储结构,其中key不能重复,底层用hash表存储。
在go的map实现中,它的底层结构体是hmap,hmap里维护着若干个bucket数组 (即桶数组)。
Bucket数组中每个元素都是bmap结构,也即每个bucket(桶)都是bmap结构,【ps:后文为了语义一致,和方便理解,就不再提bmap了,统一叫作桶】 每个桶中保存了8个kv对,如果8个满了,又来了一个key落在了这个桶里,会使用overflow连接下一个桶(溢出桶)。
划重点:
指向桶数组的指针
指向旧桶数组的指针
B 2^B个桶的数量
溢出桶的数量
储存溢出桶的extra