[go]map源码
map数据结构概述 map 的设计也被称为 “The dictionary problem”, 它的任务是设计一种数据结构用来维护一个集合的数据, 并且可以同时对集合进行增删查改的操作。 map最主要的数据结构有两种: 哈希查找表(Hash table) 查找表用一个哈希函数将 key 分配到不同的桶(bucket,也就是数组的不同 index) 开销主要在哈希函数的计算以及数组的常数访问时间。在很多场景下,哈希查找表的性能很高。 哈希查找表最差是 O(N), 平均查找效率是 O(1) 遍历哈希查找表则是乱序的 解决冲突的办法: 链表法和开放地址法 搜索树(Search tree) 一般采用自平衡搜索树,包括:AVL 树,红黑树(c++)。 自平衡搜索树法的最差搜索效率是 O(logN) 遍历自平衡搜索树,返回的 key 序列,一般会按照从小到大的顺序 注: Go 语言采用的是哈希查找表,并且使用链表解决哈希冲突。 hash函数 hash函数,有加密型和非加密型。 加密型的一般用于加密数据、数字摘要等,典型代表就是md5、sha1、sha256、aes256这种; 非加密型的一般就是查找。在map的应用场景中,用的是查找。选择hash函数主要考察的是两点:性能、碰撞概率。 golang使用的hash算法根据硬件选择,如果cpu支持aes,那么使用aes hash