HashMap
2020-04-22 10:26:24 0 举报
Hash原理图
作者其他创作
大纲/内容
key:7
Entry
Null
key:3
key:5
e
是
替换旧值
2
Entry new
key:2
当线程二完成resize后,切换到线程一,这是e就entry.key=3的节点,next节点为Entry.key=7,这是迁移3没有问题,当执行下一步时,由于新的链表结构,Entry.key=7 next已经指向了Entry.key=3,就会造成死循环。原因:jdk1.7中,链表的插入是在头部,也就是说,在迁移列表的过程,会造成元素的倒序排列。
替换key=null对应的value
线程一
否
生成新的Entry对象,插入到链表头部
int hash=hash(key)计算key的hash值
next:key=7
遍历列表查找
返回null
null
线程二
key是否为null
Entry[] table是否初始化
初始化
返回旧值
找到
HashMap resize时,数组复制过程
是否resize
HashMap 多线程下Resize死循环的问题
e:key=3
插入链表头部逻辑
1
0 条评论
下一页