一、开发环境
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 的常量池中 在类加载前被加载
静态常量可以在任意位置被直接调用
*/
愿你走出前半生 归来仍是少年