HashMap的工作原理(wait publish)(切记)

本文详细介绍了Java 1.8中HashMap的存储机制,包括当链表长度超过8时转换为红黑树,低于6时转回链表的设计。此外,还对比了与Java 1.7的区别,如插入位置的变化以及Entry被Node替代。在put过程中,HashMap通过Key的Hash值计算下标,处理碰撞,并在达到特定阈值时进行扩容。get过程则利用Key的hashcode找到节点,通过equals方法获取值对象。
摘要由CSDN通过智能技术生成

问题回答

1 HashMap 的存储机制

在 Java 1.8 中,如果链表的长度超过了 8 ,那么链表将转化为红黑树;链表长度低于6,就把红黑树转回链表;

2 Java 1.8 中 HashMap 的不同

在 Java 1.8 中,如果链表的长度超过了 8 ,那么链表将转化为红黑树;链表长度低于6,就把红黑树转回链表;
发生 hash 碰撞时,Java 1.7 会在链表头部插入,而 Java 1.8 会在链表尾部插入;

在 Java 1.8 中,Entry 被 Node 代替(换了一个马甲)。 3 put过程

对Key求Hash值,然后再计算下标
如果没有碰撞,直接放入桶中(碰撞的意思是计算得到的Hash值相同,需要放到同一个bucket中)
如果碰撞了,以链表的方式链接到后面
如果链表长度超过阀值( TREEIFY THRESHOLD==8),就把链表转成红黑树,链表长度低于6,就把红黑树转回链表
如果节点已经存在就替换旧值
如果桶满了(容量16*加载因子0.75),就需要 resize(扩容2倍后重排)
3 get过程
当我们调用get()方法,HashMap会使用键对象的hashcode找到bucket位置
找到bucket位置之后,会调用keys.equals()方法去找到链表中正确的节点
最终找到要找的值对象

简要回答
1 HashMap 的存储机制

在 Java 1.8 中,如果链表的长度超过了 8 ,那么链表将转化为红黑树;链表长度低于6,就把红黑树转回链表;

2 Java 1.8 中 HashMap 的不同

在 Java 1.8 中,如果链表的长度超过了 8 ,那么链表将转化为红黑树;链表长度低于6,就把红黑树转回链表;
发生 hash 碰撞时,Java 1.7 会在链表头部插入,而 Java 1.8 会在链表尾部插入;
在 Java 1.8 中,Entry 被 Node 代替(换了一个马甲)。
拓展连接:
HashMap原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值