ConcurrentHashMap 的红黑树
1、红黑树
红黑树是一种特殊的二叉树,主要用它存储有序的数据,提供高效的数据检索,时间复杂度为O(lgn),每个节点都有一个标识位表示颜色,红色或黑色,有如下5种特性:
每个节点要么红色,要么是黑色;
根节点一定是黑色的;
每个空叶子节点必须是黑色的;
如果一个节点是红色的,那么它的子节点必须是黑色的;
从一个节点到该节点的子孙节点的所有路径包含相同个数的黑色节点;
只要满足以上5个特性的二叉树都是红黑树,当有新的节点加入时,有可能会破坏其中一些特性,需要通过左旋或右旋操作调整树结构,重新着色,使之重新满足所有特性。
2、ConcurrentHashMap红黑树实现
在1.8的实现中,当一个链表中的元素达到8个时,会调用treeifyBin()方法把链表结构转化成红黑树结构。
并非一开始就创建红黑树结构,如果当前Node数组长度小于阈值MIN_TREEIFY_CAPACITY,默认为64,先通过扩大数组容量为原来的两倍以缓解单个链表元素过大的性能问题。