1.jdk1.7使用的头插,那么上锁的对象就可能不在头上,就无法保证某个链表上的操作是唯一的。

2.jdk1.8之后就是用了尾插法,保证可以使用锁头的方式实现锁;

3.部分源码: jdk1.7的put方法中使用了尾插,导致1.7中实现多线程安全是使用分段的方式实现的; alt alt alt

4.jdk1.8的方法是尾插;所以CurrentHashMap中的多线程实现的方式是通过锁表头的方式实现的;

5.jdk1.7之前使用的头插法的原因在于考虑了热点数据的原因,比如最新插入的数据最先被找到,原因hash算法的时间复杂度是O(1),而链表中的时间复杂度是O(n).

6.扩容会导致热点数组的下移;