社区
Java SE
帖子详情
HashMap扩容的这一步怎么理解
天涯with0
2019-11-17 11:36:11
这一步的扩容阈值不应该是数组长度*加载因子吗?为什么非得当前数组长度<default_inital_capacity时扩容阈值才等于长度*加载因子呢
...全文
514
2
打赏
收藏
HashMap扩容的这一步怎么理解
这一步的扩容阈值不应该是数组长度*加载因子吗?为什么非得当前数组长度<default_inital_capacity时扩容阈值才等于长度*加载因子呢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
一个帅逼
2019-11-22
打赏
举报
回复
你这文档看着应该就是jdk1.8的hashMap,但是好像有点问题,看源码是如果你重载了负载因子和底层初始化数组长度,数组扩容时,按你说的情况会走到图中圈起来的部分
,新数组的扩容阈值会等于当前数组长度*2*负载因子
imiMi_
2019-11-18
打赏
举报
回复
看这个图有些细节是看不懂的,建议看源码,这部分的源码我给你贴这儿了,这是jdk1.8的扩容逻辑 int oldCap = (oldTab == null) ? 0 : oldTab.length; int oldThr = threshold; int newCap, newThr = 0; if (oldCap > 0) { if (oldCap >= MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return oldTab; } else if ((newCap = oldCap << 1) < MAXIMUM_CAPACITY && oldCap >= DEFAULT_INITIAL_CAPACITY) newThr = oldThr << 1; // double threshold } else if (oldThr > 0) // initial capacity was placed in threshold newCap = oldThr; else { // zero initial threshold signifies using defaults newCap = DEFAULT_INITIAL_CAPACITY; newThr = (int)(DEFAULT_LOAD_FACTOR * DEFAULT_INITIAL_CAPACITY); } if (newThr == 0) { float ft = (float)newCap * loadFactor; newThr = (newCap < MAXIMUM_CAPACITY && ft < (float)MAXIMUM_CAPACITY ? (int)ft : Integer.MAX_VALUE); } threshold = newThr;
java
hashmap
扩容
大小_阅读 JDK 8 源码:
HashMap
扩容
总结及图解
本文通过阅读
HashMap
的 resize 方法了解其
扩容
原理,对桶节点的迁移算法进行单元测试,画图以方便
理解
。1.
扩容
的时机
HashMap
中 put 入第一个元素,初始化数组 table。
HashMap
中的元素数量大...
简述
HashMap
的
扩容
机制
扩容
后节点要么是在原来位置,听起来好像很懵,所以还是认真看下面的分析:下面给出例子,比如从容量为16
扩容
到32时,画图表示:进行
扩容
,扩大到原来的两倍:到这
一步
,下标,
扩容
后的数据10101和原来的00101相比,...
阅读 JDK 源码:
HashMap
扩容
总结及图解
本文基于 Java8,通过阅读
HashMap
的 resize 方法了解其
扩容
原理,并对桶上链表的迁移过程进行调试,画图以加深
理解
。 文章目录1.
扩容
的时机2.
扩容
的源码如果是链结构如果是树结构3. 链表迁移算法执行结果执行...
HashMap
底层原理及
hashmap
扩容
源码详细解读(JDK1.8)
HashMap
底层原理及
hashmap
扩容
源码详细解读(JDK1.8)
一文就够!
HashMap
扩容
死循环问题
下面这是JDK 1.7中
HashMap
扩容
时调用的核心代码,作用是将原hash桶中的节点转移到新的hash桶中: void transfer(Entry[] newTable) { Entry[] src = table; int newCapacity = newTable.length; for (int j = 0...
Java SE
62,615
社区成员
307,318
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章