Java集合—HashMap

这篇博客详细介绍了Java中的HashMap,包括哈希表的概念、哈希函数的构造方法、处理哈希冲突的方法。HashMap作为Map接口的一个实现,允许key和value为null,其底层数据结构为数组+链表+红黑树。HashMap的特点包括不保证内部元素顺序,初始容量为16且必须为2的n次方。文章还探讨了HashMap的构造函数、主要方法如put、get、remove以及resize方法的工作原理。

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

Java集合—HashMap

哈希表:是一种通过关键码去寻找值得数据映射映射 的结构
哈希函数的构造方法:直接定址法、除留余数法
处理哈希冲突的方法:处理冲突是指对于一个待插入哈希表的数据元素,若按给定的哈希函数求得的哈希地址已被占用,则按一定规则求下一哈希地址,如此重复,直至找到一个可用的地址以保存该元素
HashMap介绍

public interface Map<K,V>

参数类型
K:此映射所维护的类型
V:映射值的类型
Map接口的特点
Map接口中键和值一一映射,可以通过键值来获取值,给定一个键值对,通过键来访问对应的值,键值对中键值不能重复,value可以重复
HashMap的遍历
以键值遍历

Iterator<Map.Entry<String,String>> iterator=hashMap.entrySet().iterator();
        while(iterator.hasNext()){
   
            Map.Entry<String,String> entry=iterator.next();
            String key=entry.getKey();
            String value=entry.getValue();
            System.out.println(key+" "+value+" ");
        }
        System.out.println();
        //以键遍历
        Iterator<String> iterator1=hashMap.keySet().iterator();
        while(iterator1.hasNext()){
   
            System.out.println(iterator1.next()+" ");
        }
        System.out.println();
     //以值遍历
        Iterator<String> iterator2=hashMap.values().iterator();
        while(iterator2.hasNext()){
   
            System.out.println(iterator2.next()+" ");
        }

HashMap的特点
允许key value都为null值
底层数据结构为哈希表,采用数组+链表+红黑树
不保证其内部元素的顺序
初始默认值为16,其容量必须为2的n次方
HashMap底层源码实现

  • 类的继承关系
  public class HashMap<K,V> extends AbstractMap<K,V>
         implements Map<K,V>, Cloneable, Serializable {
   

继承自AbstractMap,实现AbstractMap中的方法

  • 类的成员变量
    //默认初始容量  2的幂(2的n次方)   16
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 
    //最大容量  2的30次方
    static final int MAXIMUM_CAPACITY = 1 << 30;
    //默认加载因子  0.75f
    static final float DEFAULT_LOAD_FACTOR = 0.75f;
    //Entry数组,长度必须为2的n次幂
    transient Entry[] table;
    //已储存元素的数量
    transient int size;
    //下次扩容的临界值(阔值),size>=threshold就会扩容,
    //threshold等于capacity*load factor
    int threshold;
    //加载因子
    final float loadFactor;
  • 类的构造函数
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 <= 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值