美文网首页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产生树后原链表依然存在

    Java8 HashMap产生树后原链表依然存在且维持着 源码为证 先看TreeNode依赖 LinkeHashM...

  • HashMap的put、get原理解读

    HashMap中使用的数组加链表(java8以后链表数据超过8以后,就改成红黑树存储)来存储键值,那HashMap...

  • HashMap源码分析

    概述 本文源码针对Java8的HashMap。HashMap内部是由数组+链表或红黑树的结构实现的。HashMap...

  • Java8 HashMap源码解析

    Java8 HashMap Java8 在 Java7 的基础上对 HashMap 进行优化,由数组+链表结构,改...

  • HashMap原理

    图解HashMap(一) 笔记: HashMap是由数组和链表组合构成的数据结构,Java8中链表长度超过8时会把...

  • Java集合 —— HashMap源码笔记

    HashMap简介 在 Java8 中,HashMap 是由数组和链表构成的数据结构,当它的链表长度超过8时,会将...

  • HashMap,TreeMap,TreeSet

    HashMap 哈希桶+链表+数据结构(红黑树,Java8以后)O(1)的平均插入,查找,删除时间复杂度致命缺陷是...

  • 集合-hashMap

    0. HashMap的数据结构 0.1 成员变量 0.2 数据结构图 java8最新引入红黑树,当链表的长度大于8...

  • HashMap

    HashMap 当变成红黑树之前会将单向链表变成双向链表,所以jdk1.8(1.8之前没有红黑树)后红黑树不仅具有...

  • HashMap源码解析

    1.HashMap结构 HashMap使用的是数组加链表的形式,数组里面存储的是key-value,在java8中...

网友评论

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

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