文章插图
1、HashMap主要成员变量
size 记录了 Map 中 KV 对的个数 。
loadFactor 装载印子,用来衡量 HashMap 满的程度 。loadFactor 的默认值为 0.75f 。
threshold 临界值,当实际 KV 个数超过 threshold 时,HashMap 会将容量扩容(threshold =容量 * 加载因子) 。
capacity 容量,如果不指定,默认容量是 16 。
2、HashMap 的扩容机制
HashMap 的扩容条件就是当 HashMap 中的元素个数(size)超过临界值(threshold)时就会自动扩容,从 16 扩容到 32、64、128…… 。在 HashMap 中,threshold = loadFactor * capacity 。
【HashMap是否设置初始化容量】3、是否设置初始化容量
在已知 HashMap 中将要存放的 KV 个数的时候,设置一个合理的初始化容量可以有效的提高性能,为啥呢?
如果我们没有设置初始容量大小,随着元素的不断增加,HashMap 会发生多次扩容,而HashMap 中的扩容机制决定了每次扩容都需要重建 hash 表,是非常影响性能的 。
4、初始值设置多少
我们可以认为,当我们明确知道 HashMap 中元素的个数的时候,把默认容量设置成expectedSize / 0.75F + 1.0F 是一个在性能上相对好的选择,但是,同时也会牺牲些内存 。
5、总结
以上的操作是一种用内存换性能的做法,真正使用的时候,要考虑到内存的影响 。但是,大多数情况下,我们还是认为内存是一种比较富裕的资源 。
其实,有时候就算不设置初始值,也没有那么大的影响,甚至是无法感知这些影响的 。
但是,大的性能优化,不就是一个一个的优化细节堆叠出来的吗?
推荐阅读
- BurpSuite2021 -- 抓包使用及设置
- python怎么验证代理IP是否有效
- 这样的PS神技你入坑了吗?是否还像小白一样被蒙在鼓里
- 虎骨苁蓉酒的功效与作用
- Springboot 动态设置注解参数值
- 监控mysql主从同步状态是否异常
- 一个设置让你的电脑网速和程序员的网速一样快
- 如何设置计算机自动关机如何设置计算机自动关机
- 局域网共享怎么设置
- 主板BIOS常用设置教程