我想问一下为什么JDK1.7及之前版本链表的插入采用头插法,而1.8改为尾插法?
hashmap的1.8还是用的头插法
如果两个线程都发现HashMap需要重新调整大小,那么它们会同时试着去调整大小。在调整大小时,存储在链表中的元素的次序会反过来,因为在放入新的位置时,HashMap会将Entry对象不断的插入链表的头部。插入头部也主要是为了防止尾部遍历,否则这对key的HashCode相同的Entry每次添加还要定位到尾节点。如果条件竞争发送了,可能会出现环形链表,之后当我们get(key)操作时,就有可能发生死循环。
两个都处于resize状态,线程1完成resize,线程2开始risize的时候会出现