哈希表详解(数据结构特点与实现原理)

哈希表详解(数据结构特点与实现原理)-mikechen

什么是哈希表?

哈希表,英文名为:Hash表,也称散列表,是根据键值而直接进行访问的数据结构。

哈希表它通过把键值(key-value)映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表。

哈希表详解(数据结构特点与实现原理)-mikechen

 

哈希表的特点?

哈希表的特点,大致分为如下3点:

1) 访问速度很快

普通的数据结构中查找某一个关键字通常需要遍历整个数据结构,时间复杂度O(n),而哈希表只需要O(1)的时间级。

 

2) 可能会产生碰撞

没有完美的散列函数,无论如何总会产生冲突,这时就需要采用冲突解决方案,比如:冲突挂链表,典型的就是HashMap的实现。

 

3) 散列表无序

散列表还有一个非常明显的特点,那就是无序,为了能够更快地访问元素,散列表是根据散列函数直接找到存储地址的,这样我们的访问速度就能够更快,但是对于有序访问却没有办法应对。

 

哈希表的数据结构?

哈希表的数据结构:本质是数组加哈希函数,如下图所示:

哈希表详解(数据结构特点与实现原理)-mikechen

key通过哈希函数,得到数组索引位置,然后就可以输出存储,查询也是通过索引来访问数组,所以哈希表的插入和查找的效率非常高,时间复杂度都是O(1)。

 

哈希表的实现原理?

哈希表的底层实现,这里我就以典型的hashmap(底层是哈希表)为代表:

哈希表详解(数据结构特点与实现原理)-mikechen

哈希表的主要思想是通过一个哈希函数,在所有可能的键与槽位之间建立一张映射表,哈希函数每次接受一个键将返回与键相对应的哈希编码或哈希值。

我们输入一个值,通过哈希函数计算后 数组的长度,把值放入数组中,这就是典型的哈希表存储。

但是,如果哈希函数映射都是同一个数组位置,表示冲突了,这个时候就需要在后面挂链表来解决哈希冲突的问题。

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法