HashMap之resize详解

1. 导读

上期分享了HashMap的key定位以及数据节点的设计, 本期就下面三个问题来分享下个人对于HashMap扩容的理解:
.1 HashMap为什么要扩容? 何时扩容?
.2 负载因子为什么是0.75?
.3 HashMap如何扩容;

2. HashMap为什么要扩容

经过上期分享, 我们都知道HashMap在构建初始是可以指定table(hash槽)的长度的, 假设我们设定了2, 这时候有10万数据要插入, 最好的情况就是两边各是5万, 最差的情况就是一边是10万, 显然这个时候hash冲突已经很严重了, 为了解决冲突, 我们就需要对table进行扩容, 所以HashMap的扩容就是加长table的长度, 来减少hash冲突的概率;

3. HashMap何时扩容

HashMap是如何来判定何时该扩容的呢?

    final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) {
   
   
        if ((tab = table) == null || (n = tab.length) == 0)
			    n = (tab = resize()).length;
		...
		if
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值