HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)

①:TreeNode

TreeNode虽然是红黑树结点,但它也有链表结构(继承了LinkeHashMap.Entry,后者继承了HashMap.Node)
HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)

②:putTreeVal()

此博文只介绍putTreeVal(),其它getTreeNode()等与其大抵相同

HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)

③:comparableClassFor()

如果该对象的类C实现了接口Comparable<C>,那么就返回此Class对象,否则,返回null
HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)

④:compareComparables()

该方法调用k的实现方法compareTo与要比较的key进行比较,返回一个int
HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)

⑤:find()

该方法表示从左右子树搜寻k
HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)

⑥:tieBreakOrder()

该方法相当于最后的比较方法,调用System.identityHashCode()对k和要比较结点的key进行比较
HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)

⑦:balanceInsertion()

该方法用于红黑树的调整
这个方法就是红黑树的核心所在,内容太多,这里就不展开了,这里推荐一篇写得很好的博客,用图解阐释了红黑树和jdk源码的关联

⑧:treeify()

此方法将链表转化为红黑树
在介绍treeify前,我们先看一个方法treeifyBin(),该方法是将链表转换成红黑树前必须要做的操作,就是将Node转化为TreeNode
HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)

接下来看treeify()
HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)

⑨:untreeify

该方法将红黑树转化为链表,发生在删除键值对时
HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)