写点什么

Java HashMap 的扩容因子为什么是 0.75

作者:HoneyMoose
  • 2022-12-01
    美国
  • 本文字数:450 字

    阅读完需:约 1 分钟

所谓的加载因子,也叫扩容因子或者负载因子,它是用来进行扩容判断的。

假设加载因子是 0.5,HashMap初始化容量是 16,当HashMap中有16 * 0.5=8个元素时,HashMap就会进行扩容操作。

HashMap中加载因子为 0.75,是考虑到了性能和容量的平衡。

由加载因子的定义,可以知道它的取值范围是(0, 1]。

  • 如果加载因子过小,那么扩容门槛低,扩容频繁,这虽然能使元素存储得更稀疏,有效避免了哈希冲突发生,同时操作性能较高,但是会占用更多的空间。

  • 如果加载因子过大,那么扩容门槛高,扩容不频繁,虽然占用的空间降低了,但是这会导致元素存储密集,发生哈希冲突的概率大大提高,从而导致存储元素的数据结构更加复杂(用于解决哈希冲突),最终导致操作性能降低。

  • 还有一个因素是为了提升扩容效率。因为HashMap的容量(size属性,构造函数中的initialCapacity变量)有一个要求:它一定是 2 的幂。所以加载因子选择了 0.75 就可以保证它与容量的乘积为整数。

 


简单来说就是结合了存储和时间的考虑,每次扩容都会重新计算 Hash 值的。

 

https://www.ossez.com/t/java-hashmap-0-75/14225

用户头像

HoneyMoose

关注

还未添加个人签名 2021-03-06 加入

还未添加个人简介

评论

发布
暂无评论
Java HashMap 的扩容因子为什么是 0.75_HoneyMoose_InfoQ写作社区