HashMap负载因子对性能的影响

负载因子是HashMap扩容的指标,当键值对数量超过bins总量的0.75时,HashMap会扩容到原来的两倍。负载因子越小,碰撞概率降低但空间利用率下降;越大则碰撞概率增加。默认0.75是考虑到冲突概率和转换为红黑树的平衡。初始化容量和负载因子的选择影响HashMap的迭代和查找性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

负载因子 ( loadFactor)

负载因子是扩充 table 的指标量, 默认 0.75, 当 Map中键值对数量 / bins总量 > loadFactor 时, 扩容 table 到原来容量的两倍.

负载因子的意义: 负载因子是在碰撞概率和空间利用率之间进行权衡的调节器. 从直观上感觉, 负载因子描述了 table 的稀疏程度.

  • 负载因子越小, 出现 hash 碰撞的概率越低, bin 中的链表越短; 同时空间利用率低 (空 bin 多, 浪费). Table 看上去非常稀疏.
  • 负载因子越大, 出现 hash 碰撞的概率越高, bin 中的链表越长; 同时空间利率也高 (空 bin 少, 不浪费). Table 看上去非常稠密.

看图从直观上感觉 table 的稀疏程度:

image-20220409183004294

左侧 table 加载因子 = 0.1, 右侧 table 加载因子 = 0.6. 不过实际上 bins 的分布不会这么均匀.

例如:

  • 场景一: table 长度 = 10, 负载因子 = 0.1, 每加入一个元素就会扩容, 浪费了空间, 但一定不会出现碰撞.

  • 场景二: 如果将场景一中的负载因子修改为1, 则加入 10 个元素后才会触发扩容, 可想而知因为这 10 个元素是通过 hash % size 落入 table 中的, 最理想的状态是每个 bulk 中落入一个元素, 但几乎可以肯定的是, 有的 bulk 中落入了两个或更多元素 (形成链表), 即出现了碰撞.

默认值为什么是 0.75?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值