HashMap JDK1.7和JDK1.8的区别

1、结构区别

jdk1.7中底层是由数组(也有叫做“位桶”的)+ 链表实现。而jdk1.8中底层是由数组+链表/红黑树实现。

2、节点区别

jdk1.7的hash是可变的,因为有rehash的操作。

jdk1.8

  • hash是final修饰,也就是说hash值一旦确定,就不会再重新计算hash值了;
  • 新增了一个TreeNode节点,为了转换为红黑树。

3、hash算法区别

jdk1.7会先判断这Object是否是String,如果是,则不采用String复写的hashcode方法,处于一个Hash碰撞安全问题的考虑。

jdk1.8计算出来的结果只可能是一个,所以hash值设置为final修饰。

4、对null的处理不同

jdk1.7中,null是一个特殊的值,单独处理。

jdk1.8中,null的hash值计算结果为0,其他地方和普通的key没区别。

5、扩容区别

jdk1.7中是先扩容后插入新值的。jdk1.8中是先插值再扩容。

6、元素插入算法的不同

jdk1.7中采用表头插入法,在扩容时会改变链表中元素原本的顺序,以至于在并发场景下导致链表成环的问题。

在jdk1.8中采用的是尾部插入法,在扩容时会保持链表元素原本的顺序,就不会出现链表成环的问题了。

7、初始化与扩容基数

初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂

注:只为学习做个笔记,请大家谨慎参考

HashMap JDK1.7和JDK1.8的区别相关推荐

  1. HashMap源码分析-jdk1.6和jdk1.8的区别

    2019独角兽企业重金招聘Python工程师标准>>> 在java集合中,HashMap是用来存放一组键值对的数,也就是key-value形式的数据,而在jdk1.6和jdk1.8的 ...

  2. HashMap在JDK1.8和JDK1.7的区别(详解)

    HashMap在JDK1.8和JDK1.7的区别 结论 先说结论,HashMap在1.7和1.8中最大的区别就是底层数据结构的变化,在1.7中HashMap采用的底层数据结构是数组+链表的形式,而在1 ...

  3. HashMap在jdk1.7和jdk1.8中的区别

    一.初窥HashMap HashMap是应用更广泛的哈希表实现,而且大部分情况下,都能在常数时间性能的情况下进行put和get操作. jdk1.7中底层是由数组(也有叫做"位桶"的 ...

  4. JDK1.7和JDK1.8中HashMap是线程不安全的,并发容器ConcurrentHashMap模型

    一.HashMap是线程不安全的 前言 只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用ConcurrentHashMap.但是为什么HashMap是线程不安全的呢,之前 ...

  5. hashmap实现原理_Java中HashMap底层实现原理(JDK1.8)源码分析

    在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依 ...

  6. 常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了)

    title: 常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了) tags: 面试常见题 常见面试题:为什么HashMap不是线程安全 ...

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

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

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

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

  9. currenthashmap扩容原理_高并发编程系列:深入探讨ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)...

    HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...

最新文章

  1. navicat 连接oracle
  2. 常用的函数式接口_Supplier接口练习_求数组元素最大值
  3. python字典计数_Python下封装个好用计数字典包
  4. 针对ie9写特殊的样式
  5. C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
  6. 作者:王倩(1983-),女,上海计算机软件技术开发中心工程师。
  7. 多名员工拉横幅讨薪却跑错地方?暴风集团回应...
  8. mysql报错1200_关于MYSQL配置replicate出现1200错误_MySQL
  9. 使用C#和Excel进行报表开发(三)-生成统计图(Chart)
  10. Hibernate相关内容
  11. discuzcode函数
  12. 中孚计算机保密玩游戏,中孚计算机保密检查
  13. sap事务代码_SAP财务常用的MM模块事务代码清单
  14. C语言题库 part.1
  15. matlab aic sic,请教ADF检验时AIC准则和SIC准则不一致时怎么办?
  16. 3701汉化包 axure r9_AXURE9最全的WEB设计元件库(分享版).rplib
  17. ESP32实验-自建web服务器配网01
  18. Win10 C盘清理的技巧,将C盘中除Windows外的所有系统文件夹移到C盘之外,节约大部分C盘空间
  19. SQL注入漏洞[OWASP TOP 1]
  20. 如何和后台接触的_民熔小课堂|跌落式熔断器该如何检修?点进来告诉你答案!...

热门文章

  1. 市面上有哪些自动生成报表的工具?
  2. Android webview 69,android-9.0-pie-env(safe-area-inset-top)无法在Android Pie WebView 69上运行
  3. 三子棋游戏--简易版
  4. 01A06.Learning Python 5th-动态类型
  5. 【CSS】1175- 使用 CSS 将爱心图片变成“伪像素风”
  6. 戴尔服务器r720固态硬盘,戴尔第12代服务器R620/R720抢先看
  7. LabVIEW 32位和64位开发环境常见问答
  8. 宁夏省银川市谷歌高清卫星地图下载(百度网盘离线包下载)
  9. 反余弦函数 acos
  10. 想学UI设计,先临摹学习GUI\WUI的成功案例!