HashMap底层实现原理 扩容机制

HashMap是一个基于链地址法解决哈希冲突的数组,当元素增多时,通过hash算法确定位置并可能形成链表。当元素数量超过数组大小的75%时,HashMap会进行扩容,扩容为原来的两倍。选择0.75的负载因子是为了平衡空间和查询效率。HashMap的大小必须是2的幂,以避免某些位置无法存放元素导致的空间浪费和查询效率降低。get方法通过hashcode快速定位到entry,再通过equals比较找到目标元素,总体时间复杂度接近O(1)。
摘要由CSDN通过智能技术生成

实现原理:

HashMap本质是一个一定长度的数组,数组中存放的是链表。

它是一个Entry类型的数组,Entry的源码:

static class Entry<K,V> implements Map.Entry<K,V> {  
        final K key;  
        V value;  
        final int hash;  
        Entry<K,V> next;  
} 

其中存放了Key,Value,hash值,还有指向下一个元素的引用。

当向HashMap中put(key,value)时,会首先通过hash算法计算出存放到数组中的位置,比如位置索引为i,将其放入到Entry[i]中,如果这个位置上面已经有元素了,那么就将新加入的元素放在链表的头上,最先加入的元素在链表尾。比如,第一个键值对A进来,通过计算其key的hash得到的index=0,记做:Entry[0] = A。一会后又进来一个键值对B,通过计算其index也等于0,现在怎么办?HashMap会这样做:B.next = A,Entry[0] = B,如果又进来C,index也等于0,那么C.next = B,Entry[0] = C;这样我们发现index=0的地方

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值