美文网首页Java 杂谈
Java8 HashMap产生树后原链表依然存在

Java8 HashMap产生树后原链表依然存在

作者: 大黑跟小白的日常 | 来源:发表于2019-01-17 16:36 被阅读5次

    Java8 HashMap产生树后原链表依然存在且维持着

    源码为证

    先看TreeNode依赖

    TreeNode继承关系 HashMap中的TreeNode

    LinkeHashMap中的Entry

    双向链表

    HashMap中的Node

    所以说 就算是 TreeNode,依旧具备链表的能力。同属于树、双向链表、链表 节点。

    它不止具备这种可以是这种结构的能力,并且它还真的是这种结构。

    继续看源码

    HashMap的判断包含value的方法,着重看遍历

    看这个源码,并没有针对treeNode做判断,做特殊遍历呀,它不能排除当前hashMap没有树结构吧,这不是链表的遍历方法么?所以我就想,是不是链表还在

    继续看

    追加Node到链表, 就算>8 产生tree 是不是意味着链表还在,并且如果还有冲突继续添加着链表元素。
    看这 确实 是 没有 去掉 链表结构的,应该是两种结构都存在着。

    看上面的添加树结构节点的代码,如果其中还有往链表追加元素,则证明成立

    继续看putTreeVal源码

    事实证明,在冲突长度>8并且map容量>64后,冲突位置,确实维持着两种结构(链表、红黑二叉树)

    相关文章

      网友评论

        本文标题:Java8 HashMap产生树后原链表依然存在

        本文链接:https://www.haomeiwen.com/subject/khbidqtx.html