- JDK1.8以前是头插法,JDK1.8及以后是尾插法
- 为什么要从头插法改成尾插法?
- 因为多线程头插法会造成死链,但一般多线程直接使用
concurrentHashMap - JDK1.7用头插是考虑到了一个所谓的
热点数据(新插入的数据可能会更早用到),但这其实是个伪命题,因为JDK1.7中rehash的时候,旧链表迁移新链表的时候,如果在新表的数组索引位置相同,则链表元素会倒置(就是因为头插) 所以最后的结果 还是打乱了插入的顺序 所以总的来看支撑JDK7使用头插的这点原因也不足以支撑下去了 所以就干脆换成尾插 一举多得
- 因为多线程头插法会造成死链,但一般多线程直接使用