HashMap JDK1.7和JDK1.8的区别
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的区别相关推荐
- HashMap源码分析-jdk1.6和jdk1.8的区别
2019独角兽企业重金招聘Python工程师标准>>> 在java集合中,HashMap是用来存放一组键值对的数,也就是key-value形式的数据,而在jdk1.6和jdk1.8的 ...
- HashMap在JDK1.8和JDK1.7的区别(详解)
HashMap在JDK1.8和JDK1.7的区别 结论 先说结论,HashMap在1.7和1.8中最大的区别就是底层数据结构的变化,在1.7中HashMap采用的底层数据结构是数组+链表的形式,而在1 ...
- HashMap在jdk1.7和jdk1.8中的区别
一.初窥HashMap HashMap是应用更广泛的哈希表实现,而且大部分情况下,都能在常数时间性能的情况下进行put和get操作. jdk1.7中底层是由数组(也有叫做"位桶"的 ...
- JDK1.7和JDK1.8中HashMap是线程不安全的,并发容器ConcurrentHashMap模型
一.HashMap是线程不安全的 前言 只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用ConcurrentHashMap.但是为什么HashMap是线程不安全的呢,之前 ...
- hashmap实现原理_Java中HashMap底层实现原理(JDK1.8)源码分析
在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依 ...
- 常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了)
title: 常见面试题:为什么HashMap不是线程安全的呢?(JDK1.7和JDK1.8角度)(看完你就能和面试官笑谈人生了) tags: 面试常见题 常见面试题:为什么HashMap不是线程安全 ...
- Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析
这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JD ...
- HashMap源码解析(JDK1.8)
HashMap源码解析(JDK1.8) 目录 定义 构造函数 数据结构 存储实现源码分析 删除操作源码分析 hashMap遍历和异常解析 1. 定义 HashMap实现了Map接口,继承Abstrac ...
- currenthashmap扩容原理_高并发编程系列:深入探讨ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)...
HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...
最新文章
- navicat 连接oracle
- 常用的函数式接口_Supplier接口练习_求数组元素最大值
- python字典计数_Python下封装个好用计数字典包
- 针对ie9写特殊的样式
- C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
- 作者:王倩(1983-),女,上海计算机软件技术开发中心工程师。
- 多名员工拉横幅讨薪却跑错地方?暴风集团回应...
- mysql报错1200_关于MYSQL配置replicate出现1200错误_MySQL
- 使用C#和Excel进行报表开发(三)-生成统计图(Chart)
- Hibernate相关内容
- discuzcode函数
- 中孚计算机保密玩游戏,中孚计算机保密检查
- sap事务代码_SAP财务常用的MM模块事务代码清单
- C语言题库 part.1
- matlab aic sic,请教ADF检验时AIC准则和SIC准则不一致时怎么办?
- 3701汉化包 axure r9_AXURE9最全的WEB设计元件库(分享版).rplib
- ESP32实验-自建web服务器配网01
- Win10 C盘清理的技巧,将C盘中除Windows外的所有系统文件夹移到C盘之外,节约大部分C盘空间
- SQL注入漏洞[OWASP TOP 1]
- 如何和后台接触的_民熔小课堂|跌落式熔断器该如何检修?点进来告诉你答案!...
热门文章
- 市面上有哪些自动生成报表的工具?
- Android webview 69,android-9.0-pie-env(safe-area-inset-top)无法在Android Pie WebView 69上运行
- 三子棋游戏--简易版
- 01A06.Learning Python 5th-动态类型
- 【CSS】1175- 使用 CSS 将爱心图片变成“伪像素风”
- 戴尔服务器r720固态硬盘,戴尔第12代服务器R620/R720抢先看
- LabVIEW 32位和64位开发环境常见问答
- 宁夏省银川市谷歌高清卫星地图下载(百度网盘离线包下载)
- 反余弦函数 acos
- 想学UI设计,先临摹学习GUI\WUI的成功案例!