HashMap中的putVal方法解析

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值