Java基础----HashMap内部执行过程

HashMap有两个很重要的参数,一个是capacity 也就是数组的容量,或者说是桶的个数,还有一个是size就是元素的个数

在Map map = new HashMap();的时候桶的个数为16个,当执行put的时候首先要进行一个叫hash的过程就是通过算法计算出要储存在哪个桶中

我们知道hash方法的功能是根据key来定位键值对储存的位置也就是说输入的key值是一个object类型,但是我们需要的是一个int类型的来进行数组的定位,所以就有了一个方法进行对其进行转换,所以就有Object方法中的hashCode方法,这个方法会返回一个int我们直接对这个int进行取模但是在java7之后这个运算就变成位运算了,大大增加了效率。

扩容

除了上述的初始化的时候会指定HashMap的容量,在扩容的其容量也可能改变。

HashMap有扩容机制,就是当达到扩容条件的时候就会进行扩容,HashMap的扩容条件就是当HashMap中的size(元素个数)超过临界值(threshold)时就会自动扩容

在HashMap中:threshold = loadFactor(装载因子) * capacity(桶数)

loadFactor 装载因子就是表示HashMap满的程度,默认值为0,75F 设置为0.75有个好处就是它正好是3/4而桶数又是2的幂鼠疫两个数的乘积都是整数。

对于一个默认的HashMap来说它触发扩容的是16*0.75 = 12 的时候触发扩容,而扩容的数量就是为原来的2倍

可以引入依赖进行扩容

<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>17.0</version>
</dependency>

Maps.newHashMapWithExpectedSize(7)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值