map又称为hash map,在算法上基于hash实现key的映射和寻址;在数据结构上基于桶数组实现key-value键值对的储存
hash
译作散列,属于压缩映射,压缩过程中存在部分信息的遗失,因此这种映射关系具有不可逆的特质
(1)hash的可重入性:相同的key,必然产生相同的hash值
(2)hash的离散型:重要两个key不相同,不论其相似度的高低,产生的hash的值都会在整个输出域内均匀的离散化
(3)hash的单向性:企图通过hash值反向映射回key是无迹可寻的
(4)hash冲突:由于输入与(key)无穷大,输出域(hash值)有限,因此必然存在不同key映射到相同hash值的情况,称之为hash冲突
hash冲突
开放寻址法
如果遍历到链表尾部,仍然没有空位,则基于拉链法续接新桶
拉链法
方法 | 优点 |
拉链法 | 简单常用,无需预先为元素分配内存 |
开放寻址法 | 无需额外的指针;地址完全连续,可以基于局部性原理,充分利用CPU高速缓存 |
扩容
(1)扩容分增量扩容和等量扩容
(2)每个桶固定可以存放八个键值对
(3)采用渐进迁移,每当桶被实际操作到时都迁移一部分的元素到新桶中,避免因为一次性的大量数据迁移引发性能抖动