1.优化点
对比JDK7和8两个版本,发现HashMap做了很大的改动
1.数据结构上面
JDK7: 数组 + 单向链表
JDK8: 数组 + 单向链表 +红黑树
改动原因:单向链表的时间复杂度为O(N),红黑树的时间复杂度为O(logN),提升查询效率
2.链表的插入方式
JDK7: 头插入
JDK8: 尾插入
改动原因:头插法多线程会出现死循环
2.源码剖析
a.put(K,V)
b.resize
c.treeifyBin
d.get(K)
e.reomove(key)
3.总结
1.hashMap8使用数组+链表+红黑树的方式提升其查询效率
2.hashMap8依然存在线程安全问题
3.使用尾插法规避头插法的多线程死循环问题
4.链表转红黑树时,满足数组长度>64,且当前链表长度>8,当前链表转为双向链表,进而转为红黑树