hashmap 环形链表分析

  • Post author:
  • Post category:其他


网上的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



版权声明:本文为xiaoe3504xiaoe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。