ConcurrentHashMap(JDK1.8)中红黑树的实现
文章目录
本文只介绍红黑树的实现 不对并发容器ConcurrentHashMap进行介绍。
- ConcurrentHashMap(JDK1.8)中红黑树的实现
- 红黑树特性
- ConcurrentHashMap数据结构示意图
- 代码实现分析
- 结点组成
- 主要方法
- 构造函数
- 新增节点修复红黑树方法
- 左旋方法
- 右旋方法
- 红黑树特性检查方法
- 删除结点方法
- 删除节点修复函数
- 新增结点方法
红黑树的理论和基础试下可以阅读红黑树与JAVA实现
红黑树特性- 每个结点的或是黑色或是红色
- 根结点是黑色
- 每个叶子结点都是黑色(NIL)
- 如果一个结点是红色,那么它的子结点必须是黑色
- 对任意一结点,该结点到其叶结点树尾端NIL指针的每一条路径都包含相同数目的黑结点
Node
// key的hash值
final int hash;
// 关键字
final K key;
// 存储值
volatile V val;
// 下一个结点
volatile Node next;
TreeNode
作为红黑树结构的存储结构,比一般红黑树存储结构出来的next和prev,可以将这些结点变成双向的链表结构,是为了方便从链表变为红黑树,在从红黑树变成链表。在ConcurrentHashMap中,链表与红黑树的转变是依据链表中的结点数量,默认变成红黑树的链表结点个数需要大于8。
static final class TreeNode extends Node {
TreeNode parent; // red-black tree links
TreeNode left;
TreeNode right;
TreeNode prev; // needed to unlink next upon deletion
boolean red;
TreeNode(int hash, K key, V val, Node next,
TreeNode parent) {
super(hash, key, val, next);
this.parent = parent;
}
Node find(int h, Object k) {
return findTreeNode(h, k, null);
}
/**
* Returns the TreeNode (or null if not found) for the given key
* starting at given root.
*/
final TreeNode findTreeNode(int h, Object k, Class kc) {
if (k != null) {
TreeNode p = this;
do {
int ph, dir; K pk; TreeNode q;
TreeNode pl = p.left, pr = p.right;
if ((ph = p.hash) > h)
p = pl;
else if (ph
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?