散列表
- 根据key计算key在表中的位置的数据结构,是key和所在存储地址的映射关系
hash函数
- 映射函数Hash(key)=addr
- hash函数可能会把两个或两个以上的不同 key 映射到同一地址,这种情况称之为冲突(或者hash碰撞
选择hash
- 计算速度快
- 强随机分布
冲突处理
-
链表法,引用链表来处理哈希冲突,也就是将冲突元素用链表链接起来,这也是常用的处理冲突的⽅式,但是可能出现一种极端情况,冲突元素比较多,该冲突链表过长,这个时候可以将这个链表转换为红黑树,由原来链表时间复度转换为红黑树时间复杂度,那么判断该链表过长的依据是多少?可以采⽤超过 256(经验值)个节点的时候将链表结构转换为红黑树结构
-
开放寻址法
将所有的元素都存放在哈希表的数组中,不使用额外的数据结构;一般使用线性探查的思路解决;
-
当插入新元素的时,使用哈希函数在哈希表中定位元素位置;
-
检查数组中该槽位索引是否存在元素。如果该槽位为空,则插⼊,否则3;
-
在 2 检测的槽位索引上加一定步长接着检查2; 加⼀定步长分为以下几种:
- i+1,i+2,i+3,i+4
-