条件
- 链表长度大于8
- 隐含条件是 Node 数组不为 null 且 Node 数组长度大于等于64 (不满足则会发生扩容代替升级)
源码分析
源码中的p是链表的头结点,for循环的第一次, e = p.next 的时候 e 指向链表的第二个元素,此时 binCount = 0,下面升级红黑树的条件是 binCount >= 7。for循环继续走下去,在链表中第九个元素为空的时候 binCount = 7,此时第九个元素刚刚已经插入元素。那么链表长度大于8时就一定会升级成红黑树了吗?让我们看下这个 treeifyBin( ) 方法的源码。
static final int TREEIFY_THRESHOLD = 8;
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
..