JavaHashMap的理解

本文详细介绍了Java中HashMap的工作原理,包括其分散与指针结构、构造函数、不同版本的底层实现、hashCode的计算以及数组下标计算方法。还探讨了哈希冲突的发生及其解决方案,如开放定址法、双哈希法、链地址法等。
摘要由CSDN通过智能技术生成

在实现快速查询上,哈希表是经常使用的一种数据结构,是根据关键码值(Key value)而直接进行访问的数据结构。而Java实现HashMap的原理具体是怎样的,需要以下方面来理解:
1.Java中分散与指针结构
2.HashMap的构造函数以及各个版本底层构造
3.hashCode的计算以及数组下标的计算
4.哈希冲突的发生和解决方案

一、Java中分散与指针结构

Java编程语言实现HashMap时,是采用分散和指针的数据结构实现一个“链表散列”的数据结构,即是和链表的结合体。

在这里插入图片描述

二、HashMap的构造函数以及各个版本底层构造

1.HashMap构造函数为:

//构造函数1
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.loadFactor = loadFactor;
    this.threshold = tableSizeFor(initialCapacity);//新的扩容临界值
}

//构造函数2
public HashMap(int initialCapacity) {
   
    this(initialCapacity, DEFAULT_LOAD_FACTOR);
}

//构造函数3
public HashMap() {
   
    this.loadFactor = DEFAULT_LOAD_FACTOR; //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值