网上很多博客都对map的内部实现讲了很多,很多人可能看完都绕晕了,看完可能装载因子是多少,扩容倍率是多少还是没搞清楚。没错我就是这样子,QAQ。
直接给出结果,装载因子6.5,扩容倍率是2倍,采用拉链法。这个拉链法并不是传统意义上的数组加链表,而是数组桶加数组链表的形式。接下来我们一步一步简单说明好了。
map的创建,一般是通过make来初始化的,编译时会将make替换为如下的runtime makemap
。可以看到,它返回的是一个叫做hmap的指针,这也是为何说map是一个指针,所以参数传递放心大胆的传,内部的修改一样会影响外部的。
func makemap(t *maptype, hint int, h *hmap) *hmap {
...
}
那么hmap长啥样呢?
type hmap struct {
count int
flags uint8
B uint8
noverflow uint16
hash0 uint32
buc