HashMap中的putVal方法解析

本文解析了HashMap的putVal方法,该方法用于插入键值对。如果键存在,新值将覆盖旧值并返回旧值;键不存在时,返回null。通过计算哈希值确定插入位置,如果冲突,会进行键的比较并处理,当表过长时,可能转换为树形结构。
摘要由CSDN通过智能技术生成

HashMap的putVal方法:插入一个新的键值对,如果该键存在,则用新值覆盖旧值,方法返回值为旧值,如果该键不存在,方法返回值为null。

参数说明:

hash:根据静态方法hash获得的hash值,此hash值为key的哈希值

key:键

value:值

onlyIfabsent:如果onlyfabsent为true,则当键相同时,不修改已存在的值,值为null的话也会修改

evict:如果evict为false,则hashmap的table处于创建模式

代码解析:

final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) {
    HashMap.Node[] tab;
    int n;
    //把当前存放节点的数组的引用赋值给局部变量tab,把当前存放节点的数组的长度赋值给n
    //如果引用为空或者数组长度为0,则对该数组扩容,将扩容后的长度赋值给n,每次扩容后的长度为2的n次幂
    if ((tab = this.table) == null || (n = tab.length) == 0) {
        n = (tab = this.resize()).length;
    }

    Object p;
    int i;
    
    //通过hash函数得到的hash值的范围在-2147483648和2147483648之间
    //但内存放不下这么长的数组,需要对数组长度取余,得到的余数就是对应的数组下标,即hash%length
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值