HashMap的原理

1、HashMap的put方法()原理

根据原理的大致流程图
在这里插入图片描述
例如我要插入如下代码

Map<String,String> map = new HashMap<>();
map.put("aa","110"); // 第一个元素
map.put("bb","120"); // 第二个元素

根据流程图,看过程

执行第一步:Map<String,String> map = new HashMap<>();
会执行HashMap的构造方法,构造扩容因子,此时,还没有去扩容


执行第二步:map.put(“aa”,“110”); // 第一个元素
这时会数组扩容,数组的默认为16,根据key进行Hash计算( (h = key.hashCode()) ^ (h >>> 16))得到数组索引,如果这个数组下标还没有值,则会直接插入到数组中

在这里插入图片描述

2、HashMap的扩容机制原理

JDK1.7

例如我们有这样的一个Map集合形式!
在这里插入图片描述
当我们多线程访问时,会出现以下情况,会形成闭环,

在这里插入图片描述
A线程执行完毕
在这里插入图片描述

JDK1.8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值