HashMap存储数据的put()方法

  

 1. 计算哈希值

 2. 处理哈希值

 3.查找链表

 4. 检查键的存在性

 5. 插入新键值对

 6. 检查扩容

 总结

         put()方法是HashMap中用于插入或更新键值对的基本方法。使用 put()方法时,会执行以下步

骤:

 1. 计算哈希值

        在调用 put(key, value)方法时,首先会根据给定的  key 计算出哈希值。Java 中使用

hashCode() 方法来计算这个哈希值。

int hash = key.hashCode();

2. 处理哈希值

        计算得到的哈希值可能很大,因此会将其转换为数组索引,通常使用取模运算,以适应哈希

表数组的大小。此外,为了减少冲突,还会使用一个特定的位运算来保证哈希值在数组长度范围

内。

int index = (hash & (table.length - 1));      //  table 是存储键值对的数组

3.查找链表

        在指定的索引处,HashMap 会检查该位置是否已经有其他键值对。如果该位置为空,则直接

插入新的键值对。如果已经存在,则需要通过比较找到适当的位置。

 4. 检查键的存在性

        如果在该索引处找到了一个非空的节点,HashMap 会遍历链表(如果碰到的是链表),检查

该链表中是否已经存在相同的键。  

         如果找到了相同的键,HashMap会更新该键对应的值。

if (existingNode.key.equals(key)) {
    existingNode.value = value; // 更新值
}

 5. 插入新键值对

        如果键在链表中不存在,则创建一个新的节点并将其添加到链表的末尾。

        如果当前索引处没有链表,则直接创建一个新的节点并将其放在该索引处。

Node newNode = new Node(key, value);
bucket.add(newNode); // 将新节点添加到链表中

6. 检查扩容

        在插入新的键值对后,HashMap 会检查当前存储的元素数量是否超过了负载因子(default load factor is 0.75)。如果超过了负载因子,HashMap将会进行扩容(resize),通常是将数组的大小扩大为原来的两倍,并重新计算所有键值对的索引,以减小碰撞的概率。

 总结

put()方法的大致步骤如下:

1. 计算键的哈希值。
2. 处理哈希值以确定在数组中的索引位置。
3. 检查该索引是否已有键值对。
4. 如果存在相同的键,更新对应的值;如果不存在,插入新的键值对。
5. 检查是否需要扩容。 
 

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值