底层是array. 是一段连续存储的相同类型的数组
切片时左闭右开,切片后访问不能越界
分配内存:
如何选择存储到哪个桶?
1取模法-key通过hash运算,与桶个数m取模
2与运算–hash处理后的桶与通个数m-1与运算,但要保证桶个数为m的值必须是2的整数次幂,否则会出现空桶
以上也不能保证不会发生hash冲突,解决办法:
1开放地址法-定位到第二个桶,若桶2不为空,则向后找空桶存储,get的时候找到2对比key不相等,就向下查找
2拉链法-定位到2但是2号桶不为空,就在2后面链一个桶存储,get时从2的链表向后对比key
Oldbuckets-旧桶位置
Nevacuate-迁移进度
当一个桶存满时,下一个键值对存在溢出桶,overflow记录溢出桶的地址
1当桶的数目B大于2的4次方即32时,会自动分配2的b-4次方个溢出桶,常规桶和溢出桶的地址都是连续的
2.extra中的overflow记录已经使用的溢出桶,是一个slice
3. Nextoverflow记录下一个可用溢出桶
4.常规桶用完后,后面链一个溢出桶,此时已使用的溢出桶noverflow数量+1,这个溢出桶的地址append到overflow,
String类型占用16字节
查找: