HashMap底层运行原理

Posted java_wxid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashMap底层运行原理相关的知识,希望对你有一定的参考价值。

我是廖志伟,一名Java开发工程师幕后大佬社区创始人Java领域优质创作者CSDN博客专家。拥有多年一线研发经验,研究过各种常见框架中间件的底层源码,对于大型分布式微服务、三高架构(高性能高并发高可用)有过实践架构经验。

博主:java_wxid
社区:幕后大佬


文章目录


本文的大概内容:

HashMap底层原理


向HashMap中存放一个元素(k1,v1),先根据k1做hash算法,然后将hash值映射到内存地址,直接获取key所对应的数据。

如果这个位置没有其它元素,将(k1,v1)直接放入一个Node类型的数组中,默认HashMap初始大小16,负载因子0.75,负载因子是一个介于0和1之间的浮点数,它决定了HashMap在扩容之前内部数组的填充度。所以当元素加到12的时候,底层会进行扩容,扩容为原来的2倍。【HashMap扩容机制】还会提到在jdk1.7的时候,这个扩容机制会引发的一些问题。

如果该位置已经有其它元素(k2,v2),那就调用k1的equals方法和k2进行比较二个元素是否相同。

如果返回值为true,说明二个元素是一样的,用v1替换v2。
如果返回值为false,说明二个元素是不一样的,用链表的形式将(k1,v1)存放。

不过当链表中的数据较多时,查询的效率会下降,所以在JDK1.8版本后做了一个升级。
HashMap存储数据时,需要满足链表长度超过8,数组长度大于64,才会将链表替换成红黑树才会树化时,会将链表替换成红黑树,来提高查找效率。


总结

以上就是今天要讲的内容,还希望各位读者大大能够在评论区积极参与讨论,给文章提出一些宝贵的意见或者建议,合理的内容,我会采纳更新博文,重新分享给大家。


提示:以下都是资源分享,求个一键三连。

博客封面

首先我要说声抱歉,作为一个学习的平台,封面引人注目是营销策略,大家不用太过在意哈,专注博客内容本身即可。当然有同学惦记着我博客的封面,这里也分享出来给大家。
点击:博客封面
提取码:2021

面试资料

福利大放送,我就求个一键三连,拜托了,这对我真的很重要。
点击:面试资料
提取码:2021

200套PPT模板

福利大放送,我就求个一键三连,拜托了,这对我真的很重要。
点击:200套PPT模板
提取码:2021

提问的智慧

福利大放送,我就求个一键三连,拜托了,这对我真的很重要。
点击:提问的智慧
提取码:2021

一键三连

感谢大家的支持,用心写博文分享给大家,你的支持(点赞收藏关注)是对我创作的最大帮助。
微信公众号:南北踏尘
主页地址:java_wxid
社区地址:幕后大佬

给读者大大的话

我本身是一个很普通的程序员,放在人堆里,除了与生俱来的盛世美颜、所剩不多的发量,就剩下180的大高个了。就是我这样的一个人,默默坚持写博文也有好多年了,有句老话说的好,牛逼之前都是傻逼式的坚持。希望自己可以通过大量的作品,时间的积累,个人魅力、运气和时机,可以打造属于自己的技术影响力。同时也希望自己可以成为一个懂技术懂业务懂管理的综合型人才,作为项目架构路线的总设计师,掌控全局的团队大脑,技术团队中的绝对核心是我未来几年不断前进的目标。

点击关注博主

点击关注博主:幕后大佬
点击关注博主:java_wxid
点击关注社区:幕后大佬

以上是关于HashMap底层运行原理的主要内容,如果未能解决你的问题,请参考以下文章

HashMap底层运行原理/底层数据结构/扩容机制/并发修改异常/fast-fail机制/优化使用

有没有推荐一本java的底层原理的书?

HashMap底层实现原理剖析

hashmap底层实现原理是啥?

docker运行vue,原理+实战+视频+源码

HashMap底层原理分析(putget方法)