<返回更多

HashMap是否设置初始化容量

2021-06-08  今日头条  newstarylz
加入收藏
HashMap是否设置初始化容量

 

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。

 

3、是否设置初始化容量

在已知 HashMap 中将要存放的 KV 个数的时候,设置一个合理的初始化容量可以有效的提高性能,为啥呢?

如果我们没有设置初始容量大小,随着元素的不断增加,HashMap 会发生多次扩容,而HashMap 中的扩容机制决定了每次扩容都需要重建 hash 表,是非常影响性能的。

 

4、初始值设置多少

我们可以认为,当我们明确知道 HashMap 中元素的个数的时候,把默认容量设置成expectedSize / 0.75F + 1.0F 是一个在性能上相对好的选择,但是,同时也会牺牲些内存

 

5、总结

以上的操作是一种用内存换性能的做法,真正使用的时候,要考虑到内存的影响。但是,大多数情况下,我们还是认为内存是一种比较富裕的资源。

其实,有时候就算不设置初始值,也没有那么大的影响,甚至是无法感知这些影响的。

但是,大的性能优化,不就是一个一个的优化细节堆叠出来的吗?

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>