千家信息网

如何进行HashMap源码分析

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章将为大家详细讲解有关如何进行HashMap源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。代码基于JDK 1.8基数知识Map是保存了K
千家信息网最后更新 2025年02月03日如何进行HashMap源码分析

这篇文章将为大家详细讲解有关如何进行HashMap源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

代码基于JDK 1.8

基数知识

Map是保存了Key-Value键值对的数据集合接口。HashMap是基于HashCode的Map实现。因为基于Key的HashCode进行存储,所以HashMap中Key都是唯一的。

  • HashMap中Key,Value均可以为null。

源码解析

类声明

1
2
3
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable {
// ...
}
  • Map - AbstractMap本身实现了Map接口,在这里再次强调了HashMap实现了Map

  • Cloneable 实现了克隆接口

  • Serializable 实现了序列化接口

数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* table, 在初次使用时进行初始化, 必要时进行大小调整。
* 在分配大小时,长度总是 2的幂
*/
transient Node[] table;


// Node静态内部类,链表数据结构
static class Node implements Map.Entry {
final int hash;
final K key;
V value;
Node next;
Node(int hash, K key, V value, Node next) {
this.hash = hash;
this.key = key;
this.value = value;
this.next = next;
}
}

上面代码描述了HashMap的底层数据结构:数组 + 链表

在1.8中,增加了红黑树,带详细研究…

构造函数

对于构造函数,提供了多个重载,以方便创建实例:

1
2
3
4
public HashMap()
public HashMap(int initialCapacity)
public HashMap(int initialCapacity, float loadFactor)
public HashMap(Map m)

在构造函数中,initialCapacityloadFactor两个参数对map的性能有很大的影响。

  • initialCapacity: 初始化大小, 即table数组的长度,如果此值太小,可能会因引起table频繁调整数组大小,如果太大,实际内容很少,则造成资源浪费,默认 1 << 4。

  • loadFactor: 加载因子,取值范围(0,1)的浮点数,如果此值太小,可能会因引起table频繁调整数组大小,如果太大,table大小很长时间不调整,调整时内容移动大。默认值0.75

1
i = (n - 1) & h;

计算key在table中的索引,h为key的hashcode,n为当前table的大小。

HashMap为非线程安全Map,其中key和value均可以为null。

关于如何进行HashMap源码分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

大小 调整 内容 接口 数据 数组 源码 函数 数据结构 知识 结构 分析 频繁 代码 文章 更多 篇文章 长度 不错 很大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江苏数据网络技术服务工程 后设计网络安全 python读取网络安全篇 服务器上的预防性工作 商机互联网科技有限公司 vmess服务器 建立客户数据库的步骤 网络安全手抄报三年级简单a3纸 宁波金智互动网络技术有限公司 网络安全模式下怎么打开qq 安卓开发生成的数据库是什么格式 不属于无线传感网络技术的是 软件开发培训总结范文 个软件开发方法的定义和优点 新澜网络技术有限公司 乡镇网络安全风险防控体系 数据库设计考试题目 手机一直显示连接服务器错误 网络安全升旗仪式新闻稿 莱阳软件开发解决方案 苹果公司中国数据库 惠州专业服务器散热器哪家便宜 云服务器自定义系统 互联网科技贷 为什么企业密信服务器错误 wps云服务器连接不上 分离数据库后 著名的手机软件开发公司 数据库查询技术难点 皖事通公积金怎么老是服务器失败
0