说一下HashMap的Put方法(基于JDK8)

在JDK 8中,HashMapput方法用于将指定的键与指定的值关联起来(或者更新一个已经存在的键的值)。

put方法详细说明

  1. 计算键的哈希值

    • 使用键对象的hashCode()方法来计算键的哈希值。
  2. 定位桶(Bucket)

    • 根据哈希值,通过(n - 1) & hash操作定位到哈希表中的某个桶(n是哈希表的大小,通常是一个2的幂次方数)。
  3. 处理冲突

    • 如果桶中已经存在节点,且节点的键与待插入的键相同(使用equals方法判断),则更新该节点的值。
    • 如果桶中已经存在节点,但键不同,则判断桶中的节点是链表还是红黑树:
      • 如果是链表,则在链表末尾插入新节点,并判断链表长度是否超过8,如果超过则转换为红黑树。
      • 如果是红黑树,则按照红黑树的规则插入新节点。
  4. 调整哈希表大小

    • 如果哈希表中节点数超过阈值(通常是哈希表大小的0.75倍),则进行扩容操作,将哈希表大小加倍。
  5. 返回值

    • 返回先前与指定键关联的值(如果存在的话),否则返回null

示例代码 (JDK 8)

import java.util.HashMap;

public class HashMapPutExample {
    public static void main(String[] args) {
        // 创建一个 HashMap 实例(初始容量为16,加载因子为0.75)
        HashMap<String, String> map = new HashMap<>();

        // 使用 put 方法插入键值对
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");

        // 打印 HashMap
        System.out.println("HashMap: " + map);

        // 更新一个已存在的键的值
        map.put("key2", "newValue2");

        // 打印更新后的 HashMap
        System.out.println("Updated HashMap: " + map);

        // 尝试插入一个已经存在的键,并获取旧值
        String oldValue = map.put("key1", "newValue1");
        System.out.println("Old value for key 'key1': " + oldValue);

        // 打印最终 HashMap
        System.out.println("Final HashMap: " + map);
    }
}
输出结果
HashMap: {key1=value1, key2=value2, key3=value3}
Updated HashMap: {key1=value1, key2=newValue2, key3=value3}
Old value for key 'key1': value1
Final HashMap: {key1=newValue1, key2=newValue2, key3=value3}

小结

特性/步骤说明
计算哈希值使用键对象的hashCode()方法
定位桶通过(n - 1) & hash操作定位到哈希表中的桶
处理冲突链表或红黑树处理哈希冲突
更新/插入如果键相同则更新值,否则插入新键值对
调整哈希表大小节点数超过阈值时扩容
返回值返回先前与键关联的值(如果存在),否则返回null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值