点击关注公众号,Java干货及时送达

作者:废物大师兄
来源:www.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、如果该位置的元素是红黑树结构,则同理,查找,找到则替换,没找到则插入。

另外,关注公众号Java技术栈,在后台回复:面试,可以获取我整理的 Java 系统面试题和答案,非常齐全。

划重点:

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

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

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

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

热门内容:
一文全面解析 Postman 工具收藏:存储知识全面总结19张图带你梳理SpringCloud体系中的重要技术点!最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

Java 8 中 HashMap 到底有啥不同?相关推荐

  1. Java 8中HashMap冲突解决

    Java 8中HashMap冲突解决 目录(?)[+] 在Java 8 之前,HashMap和其他基于map的类都是通过链地址法解决冲突,它们使用单向链表来存储相同索引值的元素.在最坏的情况下,这种方 ...

  2. java项目中常量到底该怎么定义

    背景:由于最近要接手一个老的系统,在看代码逻辑的过程中,看到程序中有很多魔法数字,所以着手把系统中的常量单独提取出来,然后定义在常量类中.本来这样就可以完工了,可是我有俩疑问: 1,为什么要将常亮提取 ...

  3. Java集合中HashMap日常问题及解决办法

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天在学习Session的时候,利用了Session可持久化保存服务器端的特性尝试做了一下用HashMap嵌套的购物车( ...

  4. 浅谈Java项目中要不要使用实体类

    问题背景:   经过在学校的努力学习,2021届菜鸟毕业喽.终于踏上了接受社会毒打的历程,毕业后入职第一家公司,欢天喜地的打开项目准备写下毕业后的第一套增删改查,然后emmmmmmm   公司的项目中 ...

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

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

  6. map java 初始化赋值_Java 中 HashMap 初始化时赋值(示例代码)

    1.HashMap 初始化的文艺写法 HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器.普通青年一般会这么初始化: HashMap map = new HashMap ...

  7. java string hash变量_聊聊 Java 中 HashMap 初始化的另一种方式

    如果你接触过不同的语言,从语法和代码层面来说,Java 是一种不折不扣的"臃肿.啰嗦"的语言,从另一方面来说这种臃肿和啰嗦也体现了它严谨的一面,作为适合构建大型.复杂项目的理由之一 ...

  8. Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析

    这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JD ...

  9. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

最新文章

  1. arthas-Java诊断工具
  2. 用户画像2种数据存储的方式
  3. 怎么实现阵列装配_第九篇:磁盘阵列和群晖SHR
  4. *【 POJ - 1007 】DNA Sorting(枚举,类似三元组找第二元问题)
  5. jeecg 3.5.2 新版本4种首页风格 【经典风格,shortcut风格,ACE bootstrap风格,云桌面风格】
  6. GlobalAuthenticationConfigurerAdapter.class 整合activiti 报错
  7. charles都踩过哪些坑_野路子14年 不如“缠论”1年 收益翻20倍
  8. python 类 super_python的类的super()
  9. 24小时从0到1开发阴阳师小程序
  10. matplotlib绘制李萨如图(一) 静态2D李萨如图
  11. 一文带你由浅入深Netty异步非阻塞世界
  12. 北大2022计算机学院夏令营,2020年北京大学“第十三届(2020)全国优秀大学生暑期夏令营”录取名单(第一批)及活动须知...
  13. 苹果支付 php,【苹果支付二】apple pay苹果支付以及自动续订订阅开发 - Laravel学习网...
  14. DNS服务器存在问题需要修复,dns服务(dns异常怎么都修复不了)
  15. 惠勒延迟选择实验(转)
  16. 【演讲实录+视频】走近40+世界级AI专家!第三届中国人工智能大会资料分享(直播进行中_不断更新)
  17. 4.Python数据容器之字符串(str)
  18. Central Europe Regional Contest 2019 J. Saba1000kg (并查集+根号讨论)
  19. linux命令查询网站
  20. kali系统与xshell远程连接

热门文章

  1. 遗传算法中的选择操作
  2. 2018-4-7 包子阳书本39页例题
  3. 解决Undefined function or method 'vgg_kmiter' for input arguments of type 'double'.
  4. React和Jquery比较
  5. vc++图像保存,重绘
  6. 【leetcode 字符串】466. Count The Repetitions
  7. Oracle11g密码忘记处理方法
  8. Wiz开发 定时器的使用与处理
  9. Oracle wrap 和 unwrap( 加密与解密) 说明
  10. 第九章 9.2 数组的方法(Array Methods)