内容简介:讲解HashMap的底层数据结果、处理逻辑和源码实现。首先通过画图模拟HashMap的数据结果和底层处理逻辑;然后解析put和get方法,印证模拟中的原理;通过解读源码,讲解单向链表转换成红黑树的条件,以及何时又从红黑树转换回单向链表;最后分析initialCapacity和loadFactor在HashMap中的作用,以及他们对性能的影响。

视频地址:https://mp.weixin.qq.com/s/8z4jdDkDcwlTQi13UNsQCQ

内容补充:(由于视频时长的原因,下面做几点补充

  • 默认的初始capacity是2的4次方,即16。

  • 如果设置的初始capacity不是2的n次方,底层会使用tableSizeFor方法将其设置为大于设置值的第一个2的n次方值。比如设置的初始capacity为10,实际上会使用16作为最终的初始capacity(为什么必须是2的n次方视频中有解释)。初始capacity会影响resize()的频率,因此如果要调优,应结合map中初始的条目数量和每次增加的数量总和考虑。但不应设置的过大,这个原因视频中有讲到。

  • 我在视频中说了一个“重hash”的概念,我对其的定义是在原有的hashCode上再进行一次hash处理。如果大家看一些国外的文章,可能会看到“rehashing”的概念,这个概念指的是在resize()的时候,对原有的数据进行数组下标的重新分配。这两个概念是不同的。

  • 这里重点强调一下,网上很多帖子说当列表长度大于8时(包含数组上的那个元素,总共是8个),链表就会转换成红黑树,这种说法不完整,为什么不完整,请注意视频中的相关讲解。

  • 为什么长度大于8就有可能转红黑树。转红黑树的目的是为了优化查找速度,但红黑树的空间占用比链表大,因此这是一个空间和时间的权衡。为什么是8,这个原因在源码的一段注释中进行了解释。在给定时间或空间的前提下,不同key计算出相同数组下标的概率符合“泊松分布”,注释中给出一个得算,当loadFactor为0.75,且条目数大约占总容量的0.5倍时,对一个index而言,有0个key落在上面的可能性是0.6左右,1个的可能性是0.3左右,8个的时候为0.00000006,超过8个的概率就已经小于千万分之一了。因此当阈值为8时,除非你的HashMap存了大量的条目(个人估算至少百万级),出现红黑树的概率是很低的。这样就在时间和空间上取得一个比较好的权衡。

更多视频讲解请关注我的公众号:

Java容器之HashMap源码解析(视频讲解)相关推荐

  1. Java集合系列---HashMap源码解析(超详细)

    1 HashMap 1)特性: 底层数据结构是数组+链表+红黑树运行null键和null值,,非线程安全,不保证有序,插入和读取顺序不保证一致,不保证有序,在扩容时,元素的顺序会被重新打乱 实现原理: ...

  2. Java集合框架之三:HashMap源码解析

    Java集合框架之三:HashMap源码解析 版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! HashMap在我们的工作中应用的非常广泛,在工作面试中也经常会被问到,对于这样一个重要的集 ...

  3. 面试官系统精讲Java源码及大厂真题 - 08 HashMap 源码解析

    08 HashMap 源码解析 自信和希望是青年的特权. --大仲马 引导语 HashMap 源码很长,面试的问题也非常多,但这些面试问题,基本都是从源码中衍生出来的,所以我们只需要弄清楚其底层实现原 ...

  4. HashMap源码解析(JDK1.8)

    HashMap源码解析(JDK1.8) 目录 定义 构造函数 数据结构 存储实现源码分析 删除操作源码分析 hashMap遍历和异常解析 1. 定义 HashMap实现了Map接口,继承Abstrac ...

  5. hashmap删除指定key_Java集合之HashMap源码解析(JDK8)

    哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景非常丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出 ...

  6. 红黑树分析与JDK8中HashMap源码解析

    红黑树分析与JDK8中HashMap源码解析 BST O(1), O(n), O(logn), O(nlogn) 的区别 红黑树-RBTree 插入数据 HashMap中红黑树的插入操作 HashMa ...

  7. Java HashSet和HashMap源码剖析

    转载自 Java HashSet和HashMap源码剖析 总体介绍 之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说Ha ...

  8. Java集合之TreeMap源码解析上篇

    上期回顾 上期我从树型结构谈到了红黑树的概念以及自平衡的各种变化(指路上期←戳),本期我将会对TreeMap结合红黑树理论进行解读. 首先,我们先来回忆一下红黑树的5条基本规则. 1.结点是红色或者黑 ...

  9. 通俗易懂Hashmap源码解析

    Hashmap源码解析 一.Hashmap数据结构 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value.哈希的思路很简单 ...

最新文章

  1. Python 3/前端 画图工具:Matplotlib,canvajs,pyecharts
  2. python详细安装教程环境配置-如何安装Python(环境设置)?详细安装步骤图解
  3. linux mount挂载设备(u盘,光盘,iso等 )使用说明
  4. linux 测试vim编译器_软件测试工程师必须要掌握的linux命令
  5. Registry注册机制
  6. 拼夕夕订单超时未支付自动关闭实现方案!
  7. 数据可视化demo_火出圈的大屏你真的会做吗?这才是老板最爱的可视化大屏
  8. scrapy item.py
  9. 初识JS-基础中的基础
  10. Android Studio如何查找和替换
  11. kinect相机标定参考教程
  12. React项目中第三方使用微信扫码登录
  13. 浅入浅出Vivado IP之DDS Compiler
  14. 计算机一级ps教程自学网,ps教程自学网
  15. 京津冀辽迎入汛以来最强降雨,四川盆地西部形成暴雨结界
  16. Tita 绩效宝:掌握绩效考核对话
  17. 【HTML】使用Vscode快速书写HTML
  18. 考HCIE大概需要多少钱?
  19. 浙工大c语言期中考试试题答案,浙工大c语言程序设计期末试卷2
  20. LaTeX 002:d 上带一横(d with stroke、dbar、đ)兼容 XeLaTeX 和 MathJax 的折中办法

热门文章

  1. 设置顺序表L是个递增的有序表,试写一算法将number插入L中,并使L任是一个有序表。
  2. 精通数据库可以从事什么工作_是的,您也可以开始从事数据科学
  3. 录音系列:录音文件为啥是.wav格式?
  4. 3D地图+智能导航,用微信小程序轻松实现校园内导航
  5. PONG - 100行代码写一个弹球游戏
  6. gdb 调试+子进程+线程
  7. 队列应用之热土豆传递问题Python
  8. ES存储空间不足导致索引read-only解决
  9. 浏览器内核Gecko与WebKit哪个性能更强大
  10. NPOI 合并单元格