HashMap的实现原理

HashMap的实现原理:

由Map接口定义的集合又被叫做是查找表,将key值作为value的索引,以key-value键值对的方式进行数据存储,其中key值不可重复; 而Map有多种实现类,以哈希表(hashtable)作为底层数据结构实现的,我们叫做HashMap;因此HashMap的实现原理即哈希表数据结构的实现原理

基于哈希表(数组+链表+二叉树(红黑树))

默认的加载因子为0.75,默认数组大小为16

把对象存储到哈希表中,如何存储?

把key通过hash()方法计算hash的值,然后用这个hash值对数组长度(默认是16)取模,来决定对key对象再数组中存储的位置,当这个位置有多个对象时,以链表结构存储,JDK1.8后,当链表长度大于8时,链表转换为红黑树结构存储,这样的目的是为了取值更快,存储的数据量越大,性能的表现越明显。

扩充原理

当数组的容量超过75%时,数组需要进行扩充,每次扩充1倍,扩充次数过多,会影响性能,每次扩充表示哈希表会重新散列(重新计算每个位置的存储位置),我们尽量在开发中减少扩充次数带来的性能问题。

线程不安全,适合在单线程里使用

总结:

hash表就是通过传入的键值对,通过hash算法指向一个连续的存储空间(数组存储),将键值对存入数组;对于指向相同的存储空间的hash值,再以链表方式存储;这样hashmap不仅具有了数据查询快速的特性,同时有了链表方便插入、删除的特性;因此hashMap对于数据的存储查询具有非常好的特性;

posted @   JamieChyi  阅读(21)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示