加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

3分钟让你大白:HashMap之红黑树树化进程

发布时间:2019-10-13 08:58:37 所属栏目:建站 来源:追逐仰望星空
导读:01 概述 HashMap是Java措施员行使频率最高的用于映射(键值对)处理赏罚的数据范例。跟着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现举办了优化,譬喻引入红黑树的数据布局和扩容的优化等。本文首要说明一下HashMap中红黑树树化的进程。 02

接着我们看向右旋转的代码

  1. static <K, V> TreeNode<K, V> rotateRight(TreeNode<K, V> root, TreeNode<K, V> p) 
  2.  { 
  3.  // l:left,左节点。 
  4.  // pp:parent parent,父节点的父节点。 
  5.  // lr:left right,左节点的右节点。 
  6.  TreeNode<K, V> l, pp, lr; 
  7.  if (p != null && (l = p.left) != null) 
  8.  { 
  9.  if ((lr = p.left = l.right) != null) 
  10.  lr.parent = p; 
  11.  if ((pp = l.parent = p.parent) == null) 
  12.  (root = l).red = false; 
  13.  else if (pp.right == p) 
  14.  pp.right = l; 
  15.  else 
  16.  pp.left = l; 
  17.  l.right = p; 
  18.  p.parent = l; 
  19.  } 
  20.  return root; 
  21.  } 

3.刚进来的时辰布局是这个样子。

3分钟让你大白:HashMap之红黑树树化进程

在这里的P就是适才传进来的XPP。

4.这里我们以为LR是存在的,其拭魅这个不影响首要的旋转,为空就指向null呗,直接执行完9和10行。

  1. 9 if ((lr = p.left = l.right) != null) 
  2. 0 lr.parent = p; 
3分钟让你大白:HashMap之红黑树树化进程

5.在这里我们倘使PP是存在的,直接执行完11的表达式不再执行12行。(不再说明不存在的环境)。

  1. 11 if ((pp = l.parent = p.parent) == null) 
  2. 12 (root = l).red = false; 
3分钟让你大白:HashMap之红黑树树化进程

6.因为11行的前提不切合,此刻直接执行13行的表达式,不切合执行15行else,执行16行。

  1. 15 else 
  2. 16 pp.left = l; 
3分钟让你大白:HashMap之红黑树树化进程

7.最后执行层17和18行。

  1. 17 l.right = p; 
  2. 18 p.parent = l; 
3分钟让你大白:HashMap之红黑树树化进程

最终完成两次的旋转。

08 疑问?

各人也许认为和适才接不上着实是这样的,适才在右旋转前的时辰的图像是这个样的。

3分钟让你大白:HashMap之红黑树树化进程

由于我们传进来的是XPP,以是团结上一次的向左旋转我们在向右旋转的时辰看到全图应该是这个样子的。(注:XPPP也许是XPP的左父节点也也许是右父节点这里不影响,并且可所以恣意颜色)

3分钟让你大白:HashMap之红黑树树化进程

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读