HashMap 系列文章
- HashMap 的自定义常量分析
- HashMap 的构造函数分析
- HashMap 的 hash 算法和寻址地址的优化
前言
HashMap 中有很多自定义的参数,这些参数都有哪些?作用分别是什么呢?接下来,小李分别为你们进行讲解。
imageDEFAULT_INITIAL_CAPACITY
默认初始化的容量,必须是 2 的 n 次方。默认大小是 16,通过 HashMap 的无参构造函数创建 HashMap,那么 HashMap 的初始化大小就是 DEFAULT_INITIAL_CAPACITY。
image
DEFAULT_LOAD_FACTOR
默认的加载因子,0.75。加载因子有什么作用呢?就是为了计算下面要说的阈值。
为什么 DEFAULT_LOAD_FACTOR 默认值是 0.75 呢?
如果值太小,会造成空间的浪费;
值太大,会造成更多的 hash 冲突;
所以通过大数据的计算,加载因子为 0.75 的时候是比较折中的做法。
image
loadFactor
hash 表的加载因子,默认就是 DEFAULT_LOAD_FACTOR ,可以通过构造函数进行设置。
threshold
阈值,计算方式是 capacity * load factor,如果是默认计算的话,阈值就是 16 * 0.75=12。也就是说,当表的长度大于 12 的时候,就需要调用 resize(),进行扩容的操作。
image
entrySet
缓存 enrySet() 方法的数据,通过 entrySet 可以获取所有的键值对记录,用于循环 HashMap 的键值对。
image
MAXIMUM_CAPACITY
最大的容量 1 <<30,相当于 2^30 ,容量必须是 2 的 n 次方,并且小于等于 MAXIMUM_CAPACITY。如果大于 2^30 ,会赋予 Integer.MAX_VALUE,也就是 2^31 - 1。
image
image
MIN_TREEIFY_CAPACITY
转换成红黑树需要的最少的表格容量。
image
TREEIFY_THRESHOLD
判断节点数量大于等于 8 的时候,就需要开始进行一个节点转成红黑树的一个操作,就是 treeifyBin方法。但是在转成红黑树的时候还有个条件,就是表的大小应该大于等于 MIN_TREEIFY_CAPACITY,否则会进行 resize() 的操作。
image image image
UNTREEIFY_THRESHOLD
判断节点索引小于等于 6 (节点是从 0 开始的),就会调用 untreeify 方法,返回一个非 TreeNode 的列表,该列表替换非 TreeNode 节点的内容。
image image
总结
本节主要带大家了解了 HashMap 的一些基本常量分析,带大家一起回顾一下:
- DEFAULT_INITIAL_CAPACITY:默认初识表格的容量,值为 16,必须是 2 的 n 次方;
- DEFAULT_LOAD_FACTOR:默认加载因子,值为 0.75;
- loadFactor: 加载因子,可以通过构造函数设置 loadFactory;
- threshold:阈值,当 hash 表的 size 大于这个值得时候,需要进行 resize 扩容操作,公式是 capacity * load factor;
- entrySet:缓存 entrySet() 方法的数据,可以对键或者值进行遍历。
- MIN_TREEIFY_CAPACITY:节点转换成红黑树需要的最少的表格容量,值是 64;
- TREEIFY_THRESHOLD:判断节点是否需要转成红黑树节点,值是 8;
- UNTREEIFY_THRESHOLD:判断是否需要调用 untreeify 方法,值是 6。
下一讲会带来 HashMap 的构造函数讲解。
网友评论