HashMap的数据结构,哈希冲突,JDK1.7和JDK1.8 HashMap的区别

数据结构

如下图所示,HashMap是利用数组与链表结合的形式构建的。竖列为数组结构,默认初始数量为16(1<<4)个,横列为链表结构用于解决散列冲突的问题。当数组中有值得元素超过了装载因子的比例(默认为0.75)时,会引发扩容的操作。此操作是为了避免元素过满时引起的链表长度过长,从而影响查找性能。

在这里插入图片描述

上图为jdk1.7之前的实现,jdk1.8实现方法是当某一个桶中的元素个数超过了8时,将此桶中的链表构建成红黑树。

Hashmap 实现方式 jdk1.7 和 1.8区别

hashmap 是很常用的一种集合框架,其底层实现方式在 jdk1.7和
jdk1.8中却有很大区别,今天我们通过看源码的方式来研究下它们之间的区别。

hashmap 是用来存储数据的,它底层数据结构是数组,数组中元素是链表或红黑树,通过对 key 进行哈希计算等操作后得到数组下标,把
value 等信息放在链表或红黑树存在此位置。如果两个不同的 key
运算后获取的数组下标一致,就出现了哈希冲突。数组默认长度是16,如果实际数组长度超过一定的值,就会进行扩容。在我看来,1.7和1.8主要在处理哈希冲突和扩容问题上区别比较大。

什么是哈希冲突

哈希冲突以及解决方法的详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值