社区
Java SE
帖子详情
HashMap扩容的这一步怎么理解
天涯with0
2019-11-17 11:36:11
这一步的扩容阈值不应该是数组长度*加载因子吗?为什么非得当前数组长度<default_inital_capacity时扩容阈值才等于长度*加载因子呢
...全文
530
2
打赏
收藏
HashMap扩容的这一步怎么理解
这一步的扩容阈值不应该是数组长度*加载因子吗?为什么非得当前数组长度<default_inital_capacity时扩容阈值才等于长度*加载因子呢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
多线程并发情况下
扩容
产生的死锁问题解决.docx
这就有可能导致A线程和B线程同时对一个数组
扩容
,A线程
扩容
后替换掉老数组,这时B线程使用的数组实际上是A线程
扩容
后的数组,就会产生线程安全问题。 死锁原因 比如,当前集合数组长度为2,已经有两个元素被放在了下标为0的节点里形成了链表结构,此时,有两个线程都同时向集合添加新元素,所以每个线程在添加时都会对原集合数组进行
扩容
。 插入前的数组 : 1)线程一先执行,当它执行完上面代码“Entry
next = e.next;”以后,e指向A,next指向B,时间片用完,线程一挂起。此时, : 2)线程二后执行,并且完成了整个
扩容
操作,而且
扩容
后的新数组替换了原数组。此时, : 3)线程一继续执行,e指向A,next指向B。此时,原数组已经被线程二扩充了。
用
hashmap
实现词典查询
用
hashmap
结构将字典文件中的词条装入内存,并基于该结构进行查询
hashmap
.zip
hashmap
.zip
深入arraylist,linkedlist,
hashmap
,hashset源码(2012/3/18)
NULL 博文链接:https://lvwenwen.iteye.com/blog/1456986
java
hashmap
扩容
大小_阅读 JDK 8 源码:
HashMap
扩容
总结及图解
在 Java8 中,
HashMap
由数组+链表+红黑树组成的。
扩容
时,数组容量翻倍,数组中每一个桶中的多个节点(链结构或树结构)都需要 rehash 迁移到新的数组中去。本文通过阅读
HashMap
的 resize 方法了解其
扩容
原理,对桶节点的迁移算法进行单元测试,画图以方便
理解
。1.
扩容
的时机
HashMap
中 put 入第一个元素,初始化数组 table。
HashMap
中的元素数量大...
Java SE
62,630
社区成员
307,264
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章