新HashMap(int)和番石榴Maps.newHashMapWithExpectedSize(int)之间的区别

the*_*oop 11 java collections guava

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

Map m = new HashMap(100);
Run Code Online (Sandbox Code Playgroud)

番石榴提供了一种Maps.newHashMapWithExpectedSize(int)方法,我希望简单地称之为HashMap(int).但它不会这样做,而是计算自己的容量并使用它.

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

Col*_*inD 7

你读过方法的Javadoc了吗?

创建一个HashMap具有足够高"初始容量" 的实例,它应该保持expectedSize元素不增长.

请注意,new HashMap(int)构造函数的"initial size"参数指定存储条目的哈希表的初始大小,这基本上是您不必关心的实现细节.当哈希表超出地图的加载因子(默认为0.75)时,它将调整大小,这意味着如果指定初始容量为16,然后向地图添加16个条目,则几乎可以肯定地调整哈希表的大小.

随着番石榴的方法,如果你指定的预期大小 16,然后添加16个条目,哈希表应该不会调整.