java - new HashMap(int) 和 guava Maps.newHashMapWithExpectedSize(int) 的区别

标签 java collections guava

在 Java 中,您可以创建一个新的 HashMap 来保存特定数量的项目,如下所示:

Map m = new HashMap(100);

Guava 提供了一个 Maps.newHashMapWithExpectedSize(int) 方法,我希望它可以简单地调用 HashMap(int)。但它并没有这样做,而是计算自己的容量并使用它。

为什么 newHashMapWithExpectedSize 做自己的事情,为什么我要使用它而不是直接调用 new HashMap(int)

最佳答案

你读过这个方法的Javadoc吗? ?

Creates a HashMap instance, with a high enough "initial capacity" that it should hold expectedSize elements without growth.

请注意,new HashMap(int) 构造函数的“初始大小”参数指定了存储条目的哈希表的初始大小,这基本上是一个实现您不必关心的细节。当哈希表超过映射的加载因子(默认为 0.75)时,它会调整大小,这意味着如果您指定初始容量为 16,然后向映射添加 16 个条目,哈希表将几乎肯定会调整大小。

使用 Guava 的方法,如果您将预期大小 指定为 16,然后添加 16 个条目,哈希表将不会调整大小。

关于java - new HashMap(int) 和 guava Maps.newHashMapWithExpectedSize(int) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220820/

相关文章:

java - 如何像浏览器一样缓存html文件,但取决于头文件在服务器上

java - 按顺序和逆顺序打印

c# - Entity Framework 以 1-* 关系存储集合大小

java - 从 Guava Multimap 中的值返回键

java - 如何在 Node js/Java 中捕获网络调用?

java - 为什么 Java 的 Integer 类没有 compare() 方法?

c# - 一个 C# 集合,其行为类似于 C++ set 或 priority_queue?

java - 仪表化哈希集和重写 add 和 addAll

scala - 如何创建 com.google.common.collect.HashBiMap

java - 带统计信息的异步​​咖啡因缓存