rehash会出现死循环只有jdk1.7会出现吧
来源:9-4 HashMap与ConcurrentHashMap解析
![](http://img1.sycdn.imooc.com/user/545869390001b87802200220-100-100.jpg)
宝慕林4309021
2019-01-17
jdk1.8已经没有这个问题了, 但是可能会有数据丢失
写回答
1回答
-
Jimin
2019-01-18
你好,给你学的这么细点个赞,我猜想你想表达的其实是jdk8之前的都会出现死循环,jdk8里完全调整了实现,在扩充HashMap的时候,不需要像之前的实现那样重新计算hash,只需要看看原来的hash值新增的那个bit是1还是0就好了,是0的话索引没变,是1的话索引变成“原索引+oldCap”,这个设计省去了重新计算hash值的消耗,而且由于新增的1bit是0还是1可以认为是随机的,因此resize的过程,均匀的把之前的冲突的节点分散到新的bucket了,这是JDK8的优化点。另外,之前实现中rehash的时候,旧链表迁移新链表的时候,如果在新表的数组索引位置相同,则链表元素会倒置,而JDK8不会倒置
00
相似问题