【JavaSE】Map集合,HashMap的常用方法put、get的源码解析

本文主要探讨Java中的HashMap集合,介绍了HashMap的构造方法、put方法和get方法的工作原理。HashMap通过哈希表存储键值对,利用数组和链表的特性进行快速查找和修改。在put方法中,根据key的hashCode计算下标,处理冲突并插入元素,当链表长度达到一定阈值时,链表会转换为红黑树。get方法则通过key的hashCode找到对应的value。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Map集合

Collection集合的特点是每次进行单个对象的保存,如果现在要进行一对对象(偶对象)的保存就只能使用Map集合来 完成,即Map集合中会一次性保存两个对象,且这两个对象的关系:key=value结构。这种结构最大的特点是可以通 过key找到对应的value内容。
首先来观察Map接口定义:

public interface Map<K,V>

在Map接口中有如下常用方法:

No 方法名称 类型 描述
1. public V put(K key , V value); 普通 向Map中追加数据
2. public V get(Object key); 普通 根据Key取得对应的Value,如果没有返回null
3. public Set KeySet(); 普通 取得所有key信息,key不能重复
4. public Collection values(); 普通 取得所有value信息,可以重复
5. public Set<Map.Entry<K,V>> entrySet(); 普通 将Map集合变为Set集合

Map本身是一个接口,要使用Map需要通过子类进行对象实例化。Map接口的常用子类有如下四个: HashMap、 Hashtable、TreeMap、ConcurrentHashMap。
这篇博客重点讲解一下HashMap。

HashMap子类

用法如下:

Map<K,V> map = new HashMap<>();

这样就创建了一个Map集合,可以向里面用put方法添加K,V键值对。
先了解一下HashMap是如何存储键值对的,如图:
在这里插入图片描述它结合了数组查找元素快,链表修改结构快的特点。先用哈希表建立一个数组,然后将产生哈希冲突的元素按照链地址法的方式放在桶里面的链表中。如果链表中的元素太多,链表还会树化,下面再详细说。

HashMap的构造方法

无参构造:

public HashMap() {
   
        this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
    }

static final float DEFAULT_LOAD_FACTOR = 0.75f;

无参构造只是设置了一个哈希表的负载因子,用的是默认值的0.75。
有参构造:

public HashMap(int initialCapacity) {
   
        this(initialCapacity, DEFAULT_LOAD_FACTOR);
    }
public HashMap(int initialCapacity, float loadFactor) {
   
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal initial capacity: " +
                                               initialCapacity);
        if (initialCapacity > MAXIMUM_CAPACITY)
            initialCapacity = MAXIMUM_CAPACITY;
        if (loadFactor <= 0 || Float.isNaN(loadFactor))
            throw new IllegalArgumentException("Illegal load factor: " +
                                               loadFactor);
        this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值