HashMap中put()方法实现原理

本文探讨HashMap的实现原理,从AbstractMap到HashMap的put方法。HashMap继承AbstractMap并实现Cloneable和Serializable接口。在put方法中,若key为空则放入首位置,否则通过哈希码确定插入位置。如果键值已存在,会覆盖原有值,否则在Entry数组中创建链表。文章强调了查看源码对程序员的重要性,并介绍了克隆与序列化概念。
摘要由CSDN通过智能技术生成

突然想解剖HashMap实现原理,Map链表的作者源码如何实现?也可以丰富一下自己的编程思想,也想让读者看见如何观看别人源码的思路和方法。所以心血来潮的我,就来解析HashMap底层原理!

送给读者的话:一个合格的程序员一定要学会观看别人代码。这样子自己的开发也会很多思路和方法。希望国内软件开发越来越好。

首先看类

public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable
{
   
    .....
}

可以看出类继承了AbstractMap抽象泛型类,实现了Map泛型接口和Cloneable、Serializable接口

AbstractMap抽象泛型类

public abstract class AbstractMap<K,V> implements Map<K,V> {
   
    ....
}

看出AbstractMap抽象类实现了Map泛型接口

注意:如果抽象类继承了泛型接口,要么改写抽象类为抽象泛型类,要么删除泛型接口中的泛型定义

接着看Map泛型接口


import java.util.Collection;
import java.util.Set;

public interface Map<K,V> {

    int size();

    boolean isEmpty();

    boolean containsKey(Object key);

    boolean containsValue(Object value);

    V get(Object key);

    V put(K key, V value);

    V remove(Object key);

    void put
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
HashMap的put操作用于向HashMap插入键值对。其底层实现原理主要包括以下几个关键步骤: 1. 计算键的哈希值:首先,对于给定的键,HashMap会调用其hashCode()方法计算出对应的哈希值。哈希值是一个整数,用于确定该键值对应的存储位置。 2. 计算桶索引:根据哈希值和当前数组容量,通过位运算得到键值对应的桶索引。具体计算方式是:(n - 1) & hash,其n为数组容量。 3. 查找桶:根据计算得到的桶索引,HashMap会定位到对应的桶位置。 4. 插入或更新:在对应的桶进行插入或更新操作。如果桶已经存在其他键值对,HashMap会遍历链表或红黑树(如果已经转换为红黑树)进行查找。如果找到具有相同键的节点,则更新其对应的值;如果没有找到,则将新的键值对插入到链表或红黑树的末尾。 5. 判断是否需要扩容:在插入或更新操作后,HashMap会判断当前元素个数是否超过负载因子与数组容量的乘积。如果超过,则触发扩容操作。 6. 扩容:扩容操作会创建一个新的数组,并将原有的键值对重新计算哈希值后放入新数组。扩容操作会涉及到数组的重新分配和重新计算哈希值,以保持较低的散列冲突概率。 通过这些步骤,HashMap的put操作可以高效地将键值对插入到HashMap。需要注意的是,如果键已经存在,则会更新对应的值;如果键不存在,则会将新的键值对插入到HashMap。同时,HashMap还会根据负载因子进行自动扩容,以保证较低的散列冲突概率和高效的操作性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

programming_dl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值