什么是哈希表?
哈希表,英文名为:Hash表,也称散列表,是根据键值而直接进行访问的数据结构。
哈希表它通过把键值(key-value)映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表。
哈希表的特点?
哈希表的特点,大致分为如下3点:
1) 访问速度很快
普通的数据结构中查找某一个关键字通常需要遍历整个数据结构,时间复杂度O(n),而哈希表只需要O(1)的时间级。
2) 可能会产生碰撞
没有完美的散列函数,无论如何总会产生冲突,这时就需要采用冲突解决方案,比如:冲突挂链表,典型的就是HashMap的实现。
3) 散列表无序
散列表还有一个非常明显的特点,那就是无序,为了能够更快地访问元素,散列表是根据散列函数直接找到存储地址的,这样我们的访问速度就能够更快,但是对于有序访问却没有办法应对。
哈希表的数据结构?
哈希表的数据结构:本质是数组加哈希函数,如下图所示:
key通过哈希函数,得到数组索引位置,然后就可以输出存储,查询也是通过索引来访问数组,所以哈希表的插入和查找的效率非常高,时间复杂度都是O(1)。
哈希表的实现原理?
哈希表的底层实现,这里我就以典型的hashmap(底层是哈希表)为代表:
哈希表的主要思想是通过一个哈希函数,在所有可能的键与槽位之间建立一张映射表,哈希函数每次接受一个键将返回与键相对应的哈希编码或哈希值。
我们输入一个值,通过哈希函数计算后 数组的长度,把值放入数组中,这就是典型的哈希表存储。
但是,如果哈希函数映射都是同一个数组位置,表示冲突了,这个时候就需要在后面挂链表来解决哈希冲突的问题。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》