3分钟让你明白:HashMap之红黑树树化过程
发布时间:2019-10-13 00:02:55 所属栏目:优化 来源:追逐仰望星空
导读:01 概述 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文主要分析一下HashMap中红黑树树化的过程。 02
x本身为根节点返回x。 x的父节点为黑色或者x的父节点是根节点直接返回不需要变换。 如若上述两个条件不满足的话,就要进行变换了,允许我再贴一点代码......没有代码分析起来很困难。 06 颜色变换
这里是一个典型的一个黑色节点的两个子节点都是红色的所以要进行颜色变换,因为插入的都是红色节点,当检测到祖父节点的左右子节点都是红色的时候两个红色就产生了冲突,所以先将节点进行这种颜色变换,将祖父节点变成红色,然后将祖父的两个子节点变成黑色,这样我们插入的红色节点就不会违背红黑树的规则了。 ![]() 这里有人会有疑问,如果祖父节点是根节点呢,那样的话祖父节点也会变成黑色,因为每次循环进行插入平衡的操作当进行这种颜色变换之后都会将插入节点的引用指向祖父节点,当进行下一轮循环的时候会优先检测当前节点是否是根节点,如果是根节点那就将颜色变成黑色,下面看图: 当将节点指向祖父节点进行下一轮循环时: ![]() 07 两个核心旋转(左旋转和右旋转)
颜色变换完成后进入下面的else块 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |