哈希表

基本概念

首先哈希表保存的数据结构是Key-Value(键值对)结构的,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。
哈希表设计了一个映射关系:f(key) = address,根据key来算出存储地址address,并把value的值保存在该地址上。
这样可以实现1次查找,这里的f函数既是存储数据过程中用来指引数据存储到什么位置的函数,也是将来用来查找这个位置的算法,即哈希算法(哈希函数)
比如这样的数据:100(工号) 张三,工号作为key,张三作为value,f(x) = x + 1 ,那么f(100) = 100+1 = 101。“张三”保存在位置为101的存储空间。而想取出值时,只需把key值100代入f(x)即可求到值保存的位置,从而取出值。

哈希表hashtable(key,value) 就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。 而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位。

哈希冲突

不同的关键字经过散列函数计算后得到了相同的散列地址,这时就会出现哈希冲突。

当哈希函数算出的哈希地址相同时,就不能实现 key和存储地址的一对一映射。此时加入链表,相当于老鹰抓小鸡,母鸡就是数组的一个下标,后面的小鸡就是链表。链表的元素个数超过8个,并且数组长度小于64的时候,数组就会扩容。当数组的长度超过64并且某一个数组的下标超过8,这时哈希表就会变成数组+红黑树(只是该索引值下的链表会转化为红黑树,其他的地方依旧保持原有的数据结构)。

 

 

 

 

 

posted on 2020-04-07 21:24  drewwestlhq  阅读(115)  评论(0编辑  收藏  举报

导航