HashMap源码分析putTreeVal(红黑树部分)——java学习总结(11)
文章目录
①:TreeNode
TreeNode虽然是红黑树结点,但它也有链表结构(继承了LinkeHashMap.Entry,后者继承了HashMap.Node)
②:putTreeVal()
此博文只介绍putTreeVal(),其它getTreeNode()等与其大抵相同
③:comparableClassFor()
如果该对象的类C
实现了接口Comparable<C>
,那么就返回此Class对象,否则,返回null
④:compareComparables()
该方法调用k的实现方法compareTo与要比较的key进行比较,返回一个int
⑤:find()
该方法表示从左右子树搜寻k
⑥:tieBreakOrder()
该方法相当于最后的比较方法,调用System.identityHashCode()对k和要比较结点的key进行比较
⑦:balanceInsertion()
该方法用于红黑树的调整
这个方法就是红黑树的核心所在,内容太多,这里就不展开了,这里推荐一篇写得很好的博客,用图解阐释了红黑树和jdk源码的关联
⑧:treeify()
此方法将链表转化为红黑树
在介绍treeify前,我们先看一个方法treeifyBin(),该方法是将链表转换成红黑树前必须要做的操作,就是将Node转化为TreeNode
接下来看treeify()
⑨:untreeify
该方法将红黑树转化为链表,发生在删除键值对时