前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hashmap希望自己只是一个数组

hashmap希望自己只是一个数组

作者头像
蛋蛋编程手记
发布2022-07-27 13:45:21
1250
发布2022-07-27 13:45:21
举报
文章被收录于专栏:蛋蛋编程手记蛋蛋编程手记

hashmap是map这种数据结构的一种实现方式,本身数据存储无序,检索操作的时间复杂度是常量级别,效率非常高。

hashmap的底层是一个数组,数据存储在数组的不同位置。

我们知道数组本身是线性结构,如果按照值去检索数据需要一个个去遍历,时间复杂度是O(n)级别,效率并不高。但是数组还可以按照索引去检索,因为数组在内存里是连续的,知道了具体的索引,很快就能算出来内存地址,实现随机读取的效果,不需要一个个去遍历。

hashmap就是利用了数组索引查找的特点才能有如此高的检索效率的

把key映射到具体的索引值也很简单,hashmap计算key的hash值,它是一个int数字,对这个数字和数组个数取模就能映射到具体的索引值了

hashmap中数组的长度总是大于数据的长度的,目的就是为了能让不同的key映射到不同的索引值。

理想状态是key映射到索引值不会重复,但是在实际操作过程中这个很难实现,于是有了hash冲突的问题。

对于hash冲突,hashmap的解决方式链式地址法,数组的每个索引可能存放不知一个数据,如果多个key映射到同一个地址,那这些数据组成一个链表存储在数组的这个位置。

我们知道链表这种数据结构的检索效率其实是不高的,当链表长度过长以后,检索效率大大下降,于是jdk1.8优化这部分结构,当链表长度超过8个后使用红黑树来替换链表

所以很多人说hashmap的底层结构是数组+链表+红黑树。但是我更想说它就是一个数组,因为引入链表和红黑树是它的无奈之举。数组才是hashmap的灵魂,hashmap希望自己只是一个数组。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 蛋蛋编程手记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档