如何设置HashMap初始容量?索引列表时的最佳 HashMap 初始容量原来这样设置

问题:我有一个列表 ( List<T> list),我想使用映射 ( HashMap<Integer, T> map) 通过它们的 id 来索引它的对象。我总是在构造函数中list.size()用作初始容量HashMap,如下面的代码所示。这是在这种情况下使用的最佳初始容量吗?

Note: I'll never add more items to the map.

List<T> list = myList;
Map<Integer, T> map = new HashMap<Integer, T>(list.size());
for(T item : list) {
    map.put(item.getId(), item);
}

知识扩展:默认情况下,HashMap 的“加载因子”为 0.75,这意味着当 HashMap 中的条目数达到所提供容量的 75% 时,它将调整数组大小并重新散列。

解决方案:

例如,如果我这样做:

Map<Integer, Integer> map = new HashMap<>(100);

当我添加第 75 个条目时,映射会将条目表的大小调整为 2 * map.size()(或 2 * table.length)。所以我们可以做几件事:

  1. 更改负载因子 - 这可能会影响map的性能
  2. 将初始容量设置为 list.size() / 0.75 + 1

最好的选择是两者中的后者,让我解释一下这里发生了什么:

list.size() / 0.75

这将返回 list.size() + list.size() 的 25%,例如,如果我的列表的大小为 100,它将返回 133。然后,如果map的大小为等于初始容量的 75%,所以如果我们有一个大小为 100 的列表,我们会将初始容量设置为 134,这意味着从列表中添加所有 100 个条目不会导致map的任何大小调整。

最终结果:

Map<Integer, Integer> map = new HashMap<>(list.size() / 0.75 + 1);

现在你懂了吗?有问题欢迎评论区留言。

👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿七度

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值