作者:废物大师兄

https://cnblogs.com/cjsblog/p/8207211.html

JDK1.8中的HashMap实现跟JDK1.7中的实现有很大差别。下面分析JDK1.8中的实现,主要看put和get方法。

构造方法的时候并没有初始化,而是在第一次put的时候初始化

putVal方法的主要逻辑是这样的:

1、如果数组还没有初始化(数组长度是0),则先初始化

2、通过hash方法计算key的hash值,进而计算得到应该放置到数组的位置

3、如果该位置为空,则直接放置此处

4、如果该位置不为空,而且元素是红黑树,则插入到其中

5、如果是链表,则遍历链表,如果找到相等的元素则替换,否则插入到链表尾部

6、如果链表的长度大于或等于8,则将链表转成红黑树

1、计算hash求位置

2、看第一个元素是不是要找的,是则返回,否则遍历

扩容就是将旧数组的元素移动到新数组

总结

1、HashMap底层是用数组+双向链表+红黑树实现的

2、插入元素的时候,首先通过一个hash方法计算得到key的哈希值,进而计算出待插入的位置

3、如果该位置为空,则直接插入(包装成Node)

4、如果该位置有值,则依次遍历。比较的规则是,hash值相同,key值相等的元素视为相同,则用新值替换旧值并返回旧值。

5、如果该位置的元素是红黑树结构,则同理,查找,找到则替换,没找到则插入。

划重点

JDK1.8中HashMap与JDK1.7中有很多地方不一样

1、1.8中引入了红黑树,而1.7中没有

2、1.8中元素是插在链表的尾部,而1.7中新元素是插在链表的头部

3、扩容的时候,1.8中不会出现死循环,而1.7中容易出现死循环,而且链表不会倒置

END

推荐好文

强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!

面试官:简单说说Java8中的HashMap到底有啥变化?相关推荐

  1. 如何应对面试官:什么场景中会用到java多线程?

    如何应对面试官:什么场景中会用到java多线程? 作者:云栖社区 原文:https://yq.aliyun.com/ziliao/1765 (点击文末阅读原文即可前往) 问:能不能简单描述一下你在ja ...

  2. 面试官比较看重简历中的哪些维度,有什么写简历的技巧、建议和总结?

    [每日一问]面试官比较看重简历中的哪些维度,有什么写简历的技巧.建议和总结? Datawhale优秀回答者:千夜同学,陶志杰 第一 ,简历一定要工整 字体格式对奇 字体大小不一 格式错乱 文字乱码的 ...

  3. 后处理程序文件大小的变量_【每日一题】(17题)面试官问:JS中事件流,事件处理程序,事件对象的理解?...

    关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 2020,实「鼠」不易 2021,「牛」转乾坤 风劲潮涌当扬帆,任重道远须奋蹄! 一.前言 2020.12.23 立 ...

  4. Java8中的HashMap分析

    本篇文章是网上多篇文章的精华的总结,结合自己看源代码的一些感悟,其中线程安全性和性能测试部分并未做实践测试,直接是"拿来"网上的博客的. 哈希表概述 哈希表本质上一个数组,数组中每 ...

  5. 面试官:为什么在系统中不推荐双写?

    引言 某日,阿雄跑去面试!于是有如下情形 面试官:"阿雄是吧,做做自我介绍!" 阿  雄:"我叫阿雄,来自某a国际电商公司!" 面试官:"我看你项目里 ...

  6. 面试官:说说Java中的信号量?Semaphore

    Semaphore (信号量)是由计算机科学家Dijkstra在1965年提出的,广泛应用不同的操作系统,在管程提出之前信号量就是并发编程领域的霸主!几乎所有并发的语言都支持信号量机制. Semaph ...

  7. java semaphore(0)_面试官:说说Java中的信号量?Semaphore

    Semaphore (信号量)是由计算机科学家Dijkstra在1965年提出的,广泛应用不同的操作系统,在管程提出之前信号量就是并发编程领域的霸主!几乎所有并发的语言都支持信号量机制. Semaph ...

  8. 面试官: 平时开发中你用过读写锁吗?

    前面实现了一个 带值变更通知能力的字典类(线程不安全),童鞋们有没有发现演示代码使用了 lock语法糖, 这个有没有问题呢? 没背景说个铲铲 同程艺龙基础架构部推出的数据获取组件DAL.Connect ...

  9. 红黑树 键值_大厂面试官:说一下JDK1.8 HashMap有哪些亮点?

    上篇我们介绍了JDK1.7版的HashMap,今天我们来讲解下JDK1.8版的HashMap. JDK1.7的实现大家看出有没有需要优化的地方? 其实一个很明显的地方就是:当 Hash 冲突严重时,在 ...

最新文章

  1. 【pytorch】pytorch-backward()的理解
  2. 使用Eclipse trace Application的启动
  3. android 传感器ceshi,Android代码-传感器-测试手机支持那几种传感
  4. 登录界面转换实现html,html5和css3登录注册表单界面切换动画
  5. 部门级服务器一般支持几个cpu,部门级服务器简介
  6. 数据结构 判断数组元素是否互不相同
  7. 关于Weex,你想了解的一切都在这里
  8. 知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2021):生物信息学中的图表示学习:趋势、方法和应用
  9. lammps学习总结3
  10. 手机可用熵_思想丨在商言“熵”
  11. CLASST T 使用
  12. excel函数技巧:MAX在数字查找中的应用妙招
  13. 浅聊前端程序员,后端程序员,全栈程序员的工作
  14. linux进程线程同步之 - POSIX线程互斥锁
  15. 外连接 及 无用的外连接
  16. Cloud Exchange已上线 Collis的公告
  17. 东胜区智慧城市管理运行初见端倪
  18. Linux 如何重启网络、禁用网卡
  19. 京东平台智能手表电商数据分析报告
  20. 根据经纬度获取城市名

热门文章

  1. 更小的刘海和更宽的5G天线,下一代iPhone你期待吗?
  2. 上市即巅峰!走乐视老路的暴风 实控人冯鑫是下一个贾跃亭?
  3. 一加WarpTen技术今日发布:全新旗舰一加7将搭载
  4. 三星旗舰机系列名称即将更换 S10或成最后绝唱
  5. 一个命令让redis服务端所有信息无所遁形~(收藏吃灰系列)
  6. MMKV_微信MMKV源码分析(一) | 整体流程
  7. python 持续集成_使用jenkins和Gitlab进行Python项目的持续集成
  8. java丑数算法_java实现找丑数
  9. Golang实践录:使用gin框架实现转发功能:一些负载均衡算法的实现
  10. 用python自己做游戏_练习项目20:使用python制作游戏(中)