[Java]浅谈HashMap底层原理

一、开发环境

JDK版本号 1.8.0_131

windows 10 X64 专业版 版本号1803

二、HashMap是什么?

HashMap可以将这个单词 拆分为两部分理解 Hash 和 Map Hash 指的是哈希表 Map 指的是 Map接口

顾名思义 HashMap 哈希映射 就是 Java 基于哈希表的 Map 接口的实现 允许使用 NULL 键 和 NULL 值

HashMap 是 非线程安全的 在多线程 环境下可能会出现一些问题

三、HashMap详细介绍.

说到 HashMap 大家都知道 HashMap 默认容量为 16 加载因子为 0.75 但却知其然而不知其所以然

上代码

/*
	HashMap 底层定义的HashMap 的容量 采用的是位运算符
	使用位运算符 可以最大程度的提升程序的运行效率
*/
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

/*
	依旧是使用位运算符 定义了 HashMap的最大容量 规定为 2 的整次幂
    1 左移 30位 也就是 2 的 30 次幂 等于 1,073,741,824
*/
static final int MAXIMUM_CAPACITY = 1 << 30;

/*
	定义了 HashMap 的 默认 加载因子
	当占用达到 0.75 之后 自动扩容
	这里可以看到 DEFAULT_LOAD_FACTOR 的类型的 单精度浮点类型
	需要在 0.75 后面 追加 f
*/
static final float DEFAULT_LOAD_FACTOR = 0.75f;

/*
	HashMap 中桶的阈值超过 8 的时候使用红黑树
*/
static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;

/*
使用红黑树的最小表容量
这个值至少要不小于红黑树阈值的四倍
*/
static final int MIN_TREEIFY_CAPACITY = 64;

/*
	HashMap 类 中定义的变量 全部由 static(静态) final(最终)修饰
	由 static 和 final 修饰的变量 被称为静态常量
	静态常量 存储在 JVM 的常量池中 在类加载前被加载
	静态常量可以在任意位置被直接调用
*/

愿你走出前半生 归来仍是少年

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值