Hashmap种种

一.头插法还是尾插法

1.JDK8以前是头插法,JDK8后是尾插法

2.为什么要从头插法改成尾插法?
A.因为头插法会造成死链,参考:https://blog.csdn.net/chenyiminnanjing/article/details/82706942

 hashmap用数组+链表。数组是固定长度,链表太长就需要扩充数组长度进行rehash减少链表长度。如果两个线程同时触发扩容,在移动节点时会导致一个链表中的2个节点相互引用,从而生成环链表
B.JDK7用头插是考虑到了一个所谓的热点数据的点(新插入的数据可能会更早用到),但这其实是个伪命题,因为JDK7中rehash的时候,旧链表迁移新链表的时候,如果在新表的数组索引位置相同,则链表元素会倒置(就是因为头插) 所以最后的结果 还是打乱了插入的顺序 所以总的来看支撑JDK7使用头插的这点原因也不足以支撑下去了 所以就干脆换成尾插 一举多得

posted @ 2021-09-08 10:45  一枚韭菜  阅读(81)  评论(0)    收藏  举报