数据结构HashMap哈希表原理分析

先看看定义:“散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

哈希表本质是数组,哈希函数是把key转换成下标用的。

几个问题:

1.不同的key,通过哈希函数计算得到的数组下标一样了怎么办?(散列冲突)

2.数组不够用了怎么办?(动态扩容)

关于问题1,解决方案关键字:开放寻址法和链表法,其中链表法最常用,散列表数组的每个值存的结构体一部分是链表的地址,如果在插入时碰到哈希值(也就是数组下标)一致时,把相同元素插入到链表后边。查找时,如果哈希值相同了,则比较链表里的key,则能找到。其中有个优化,当链表超过8个时, 可以动态调整成红黑树,方便快速查找,而不至于查找时间复杂度为O(n),当链表少于8个时,动态调整成链表,方便查找更快(虽然map查找的时间复杂度是logn,但是当元素个数很少时,反而一个个比较会更快)。

关于问题2,解决方案关键字:渐进式rehash。

原文地址:https://www.cnblogs.com/workharder/p/11775329.html