HashMap——4.HashMap中的扩容机制

一、首先先介绍HashMap中一些成员变量的设置

1、size

size指的是HashMap中存放键值对元素的个数

2、modCount

指定是对键值对操作的次数相当于一个计数器

3、capacity

HashMap数组的容量或者称为长度

4、loadFactor(加载因子||负载因子)

一般设置为0.75

二、HashMap中元素是怎样存储的?什么时候会扩容?以及为什么加载因子默认设置为0.75而不是其他值?

1、HashMap在JDK1.8之前存储元素的数组是在entry<k,v>,1.8之后是在node<k,v>中存储的,这两个数组的名字不一样但功能是一样的,它们都实现了Map.entry<k,v>接口

2、当HashMap中的元素个数size大于(capacity*loadFactor)时数组会进行2倍扩容

3、加载因子越接近于0则表示元素存储越稀疏,越接近于1则表示元素存储越密集。加载因子默认设置为0.75时是因为JDK开发人员经过大量的测试后相比于设置其他值时空间利用率、查找效率比较好的一个值的结果。

如果我们设置loadFactor的值为0.3<0.75时 我们在HashMap中存了很少的元素时就会扩容会造成空间的极度浪费。

如果我们设置loadFactor的值为0.95的话,我们的元素发生哈希碰撞的概率会很大,在HashMap中的一个Hash桶中(entry<k,v>)中存储的元素会过多从而导致查找性能的降低

所以综合空间利用和查找效率上的最大化,我们一般使用官方推荐的默认加载因子为0.75.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值