package
0.0.0-20240917151801-3e295c8ed30c
Repository: https://github.com/w3liu/algorithm.git
Documentation: pkg.go.dev

# README

1.map数据结构

type hmap struct {
    count int // 当前保存的元素个数
    B uint8 // 指示bucket数组大小
    buckets unsafe.Pointer // bucket数组指针,数组的大小为2^B
}

2.bucket数据结构

type bmap struct {
    tophash [8]uint8 // 存储哈希值的高8位
    data byte[1] // key value数据:key/key/key.../value/value/value...
    overflow *bmap // 溢出bucket的地址
}

每个bucket可以存着8个键值对

3.哈希冲突

Go使用链地址法来解决键冲突,由于每bucket可以存8个键值对,超过8个键值对就会再创建一个键值对,用类似链表的方式将bucket连接起来

4.负载因子

负载因子 = 键数量/bucket数量

Go的负载因子达到6.5的时候才会触发rehash

5.渐进式扩容

* 扩容的前提条件
    - 负载因子 > 6.5时
    - overflow > 2^15时