hashmap 环形链表分析

mac2026-10-05  0

网上的hashmap冲突太长,太复杂,看的脑仁疼,自己随便总结下,有不同意的请指正 代码如下 do {     Entry<K,V> next = e.next; // <--假设线程一执行到这里就被调度挂起了     int i = indexFor(e.hash, newCapacity);     e.next = newTable[i];     newTable[i] = e;     e = next; } while (e != null);

如图

hashmap结构为数组加链表,数组是竖的这一列,链表为横的这排 线程1 执行到代码所示位置 挂起 线程2 执行结束,用的头插法,所以next在e的前面,next指向e 然后线程1继续执行,此时e被变了吗?没有变,是线程栈里的变量 重新插入,头插法,将e插到next前面,这时e又指向next,好,循环指针形成

 

附:看的脑仁疼的链接

https://www.cnblogs.com/lan-ge/p/10290169.html

最新回复(0)