美文网首页
关于hashmap的一点笔记

关于hashmap的一点笔记

作者: mundane | 来源:发表于2022-03-17 22:37 被阅读0次

https://www.bilibili.com/video/BV1nJ411J7AA

hashmap扩容

扩容之后的节点要么在原来的位置,要么就被分配到“原位置+旧容量”这个位置,原因是重新计算的位置=(n-1)&hash, 扩容之后(n-1)从二进制来看只是右边多了一个为1的bit位,如果hash对应的这个bit位是0那就是原位置,如果是1那就是原位置+旧容量。可以用一张图来说明。


hashmap链表转红黑树的条件

  1. 数组长度大于64
  2. 链表长度大于8

hashmap链表和红黑树互转的阈值

表转树的阈值是8,树转表的阈值是6

hashmap的resize()方法总结

resize()方法的作用是扩容,大致流程如下:

  1. 计算出新的容量和扩容阈值
  2. new一个新的数组
  3. 遍历旧数组
  4. 如果该元素没有next, 直接放到新的数组;如果是树节点,拆分树节点;剩下最后一种情况就是链表,那就遍历链表,按照之前的计算方法,形成新的两条链表。一条的索引位置是原数组的索引位置,另一条的索引位置是(原数组索引位置+旧数组容量)的位置。最后将这两条链表的头结点分别挂在数组中。

hashmap的get()方法总结

  1. 通过hash值获取该key映射的桶
  2. 如果桶上的key就是要查找的key, 则直接找到并返回
  3. 如果桶上的key不是要找的key, 则查看后续的节点:
    a. 如果后续节点时红黑树节点,调用红黑树的方法根据key获取value
    b. 如果后续节点时链表节点,循环遍历链表根据key获取value
  4. 红黑树查找,如果对比节点的hash值和要查找的hash值相等,就会判断key是否相等,相等就直接返回,不相等就从子树中递归查找
  5. 树的查询复杂度是O(logn), 链表的查询复杂度是O(n)

相关文章

  • 关于hashmap的一点笔记

    https://www.bilibili.com/video/BV1nJ411J7AA[https://www.b...

  • HashMap

    想来讨论一下HashMap,随笔记录一下吧。 HashMap主要在1.7和1.8的时候变动比较大一点,主要有以下方...

  • HashMap源码笔记(二)

    紧接这上一篇:HashMap源码笔记(一)我们继续来分析HashMap源码,接下来我们来看看HashMap的源码说...

  • HashMap源码分析

    hashmap的分析网上优秀的文章有很多,个人比较推荐美团技术博客上关于hashmap的介绍。由于hashmap广...

  • 源码修炼笔记之HashMap源码解析

    HashMap高频面试题 HashMap备受面试官的青睐,笔者几乎每次面试都会遇到关于HashMap的问题,整理出...

  • ConcurrentHashMap源码分析(JDK8)

    导入 ConcurrentHashMap是HashMap的线程安全版本的实现版本,关于HashMap的分析总结,可...

  • jdk1.8 HashMap红黑树源码解析

    这篇博客主要讲解HashMap1.8的新增特性:红黑树,关于HashMap的其他内容推荐博客HashMap真的教科...

  • HashMap解读

    相信大家对HashMap都非常熟悉, 网上也有很多关于hashmap的源码解析, 此文仅记录本人对HashMap的...

  • 关于 Java HashMap、HashTable 的学习笔记

    HashMap HashMap 的数据结构 HashMap 的底层实现是 Entry数组,(如图1结构)。 从 H...

  • HashMap学习笔记

    HashMap学习笔记 初始容量在构造HashMap的时候根据预期的entry数量考虑初始容量和负载因子,这样可以...

网友评论

      本文标题:关于hashmap的一点笔记

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