HashMap源码分析 1.8

类中定义的成员变量

transient Node<K,V>[] table; //这个数组添加数据的时候初始化。
transient int size;// map中包含健值对的数量
final float loadFactor;  //map的默认加载因子
int threshold;// 下一个要调整大小的大小值(容量*加载因子)
static final float DEFAULT_LOAD_FACTOR = 0.75f;  //默认指定的加载因子

//获取hash值是公用的方法

map中put元素

       先判断当前Map中是否有值或者长度为0,先初始化一个  (Node<K,V>[] table)存储元素的数组 ,同时将下一个要调整容量大小的值赋值 threshold 。同时将容量初始化的大小 16(1<< 4) 赋值给一个临时变量n,下面 n-1 和这个key的hash取&, 判断这个索引是否为空,如果为空,创建一个Node (这个node实体是一个链表形式的实体)将这个Node实体赋值给取&的索引。如果存储的时候key一样,判断这个属性(onlyIfAbsent)是否为true,如果为true不修改这个key的value值,否则修改。

测试转链表的过程要hash值一样key不一样才可以走这个流程(后期测试)

map中get元素

    根据key获取hash值,索引的长度-1 &上hash值获取索引的值。如果不为空,就进到下一个判断,如果为空返回null。根据索引取出来的元素&上刚才key获取的hash值,判断hash值是否一样。然后判断key是否一样。一样返回刚才索引的元素。

查漏补缺 :一文读懂HashMap_慕课手记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值