-
结构变化:由数组+链表变成了数组+链表+红黑树
链表长度>=8,转换为红黑树;链表长度减少为 6,红黑树再变回链表。只有总的节点数量>=64 的时候,才会有红黑树,否则直接进行主数组扩容
-
链表节点为 Node,红黑树节点为 TreeNode。Node 是 TreeNode 的父类
-
添加到链表后面:jdk7中新的节点增加到最前,jdk8之后新节点加到最后(也是避免死循环的一种解决方式)
主数组的创建不是构造方法中搞定,而是 put 元素时通过 resize()搞定
哈希表扩容后原来链表节点重新散列后不改变之前顺序,也不会形成循环链表
注意:JDK8 HashMap 虽然针对 JDK7 的缺点做了某些修改,但是仍旧是线程不安全的,并发情况下建议使用 ConcurrentHashMap,或者使用 Collections 加锁。