c语言编程笔录

首页 >   > 笔记大全

笔记大全

java中HashMap解析put的过程是什么

更新时间:2023-10-20

HashMap的put方法介绍

HashMap是Java集合框架中的一种实现类型,它可以用来存储键值对,并支持快速的查找、插入和删除操作。put方法是HashMap中用于向集合中添加元素的方法。当我们调用put方法向HashMap中添加一个键值对时,HashMap会根据键的哈希值将其插入到对应的桶(bucket)中。如果该桶中已经存在其他键值对,那么HashMap会根据键的哈希值和equals方法判断是否存在相同的键,如果存在相同的键,则用新的值替换旧的值;如果不存在相同的键,则将新的键值对插入到链表的头部。

HashMap put方法的执行过程

1. 首先,HashMap会根据要插入的键的哈希值计算出在桶数组中的索引位置。HashMap使用hashCode方法获取键的哈希值,然后使用散列函数,例如(index = hash & (length-1)),计算出索引位置。

2. 接着,HashMap会判断该桶位置是否已经存在键值对。如果不存在键值对,直接将新的键和值插入到该桶位置,并更新集合的元素个数(size++)。

3. 如果该桶位置已经存在键值对,HashMap会遍历该桶的链表,判断链表中是否存在相同的键。HashMap使用equals方法判断键的相等性,如果找到相同的键,则用新的值替换旧的值;如果没有找到相同的键,则将新的键值对插入到链表的头部,并更新集合的元素个数(size++)。

HashMap put方法的源码

public V put(K key, V value) {
    //计算键的哈希值
    int hash = hash(key.hashCode());
    //计算键在桶数组中的索引位置
    int index = indexFor(hash, table.length);
    //遍历该桶位置的链表
    for (Entry e = table[index]; e != null; e = e.next) {
        Object k;
        //比较键是否相等
        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
            V oldValue = e.value;
            //替换旧值为新值
            e.value = value;
            return oldValue;
        }
    }
    //在链表头部插入新的键值对
    addEntry(hash, key, value, index);
    return null;
}

HashMap put方法的总结

HashMap的put方法是用于向集合中插入键值对的方法,它的执行过程包括计算键的哈希值、计算键的索引位置、判断该桶位置是否已经存在键值对,遍历链表判断键的相等性,然后根据情况进行值的替换或插入新的键值对。通过调用put方法,我们可以向HashMap中动态地添加键值对,实现快速的查找、插入和删除操作。