java并发(九):hashmap扩容时出现循环链表(jdk1.8把头插法换成了尾插法的原因)

本文详细解析了哈希表的扩容原理及Rehash机制,包括容量计算、扩容容量、单线程下的rehash过程以及多线程操作可能导致的问题。特别介绍了JDK1.8中为避免环状链表死循环而采用的尾插法。

1.容量计算

容量的阈值=容量*加载因子
在这里插入图片描述

2.扩容容量

扩容的容量大小会变成原来的两倍,用位移运算来加快计算的运行速率。
在这里插入图片描述

3.单线程下的rehash

1.初始化长度为2,加入11时开始扩容,数组长度变为原来的两倍
2.依次加入5,9,11三个节点。
在这里插入图片描述

4.多线程

多线程操作rehash形成环。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

jdk1.8为了避免上述情况将头插法变幻成了尾插法。

形成环以后,查找数据容易出现死循环。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值