HashMap 的自定义常量分析

2020-03-27  本文已影响0人  小李不秃

HashMap 系列文章

前言

HashMap 中有很多自定义的参数,这些参数都有哪些?作用分别是什么呢?接下来,小李分别为你们进行讲解。

image

DEFAULT_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 的一些基本常量分析,带大家一起回顾一下:

下一讲会带来 HashMap 的构造函数讲解。

上一篇 下一篇

猜你喜欢

热点阅读