rehash会出现死循环只有jdk1.7会出现吧

来源:9-4 HashMap与ConcurrentHashMap解析

宝慕林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不会倒置

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程