HashMap中put方法的实现过程

这篇博客详细解析了HashMap的put方法实现过程,包括计算hash值、判断是否为空、处理冲突的方法。当发生hash冲突时,若key相同则覆盖value,否则可能将链表转化为红黑树进行插入。
摘要由CSDN通过智能技术生成

HashMap的put()方法实现过程

1.首先是put(k key,V value)方法

public V put(K key, V value) {
        return putVal(hash(key), key, value, false, true);
    }

2.hash(key)方法是将该元素在计算机的物理储存位置映射成为一个int类型的整数并将其散列到散列表中对应的数组位置。进入hash(key)方法—>

static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

hash()方法是返回一个散列码,在计算散列表的位置的时候需要(n-1) & hash ,通过位扰动之后使得hash值取的相对均匀。因为规定hashMap的容量使2的幂次方,由于这个特殊性,就导致n-1必定是*0001111。为什么要减一呢?如果是n的话那必定是*00010000。这样与运算的时候,就只会在数组的首段或者尾端产生数组下标。由于是n-1而hash值相对散列的比较均匀,就会在1111之间做与运算使冲突的几率变小。从而能均匀的映射到数组下标。

3.put过程分析

final V putVal(int hash, K key, V value, boolean onlyIfA
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值