0

根据我的理解,以及我所读到的

负载因子是哈希表在其容量自动增加之前允许达到的程度的度量

因此,当 loadfactor 为 .8(80%),地图大小为 10Map时,当放入 8 个元素时,大小将增长 10 Map

所以,现在Map大小为 20。我怀疑下一个 10 元素空间何时会添加到Map.

  • whenMap又是 80% 满了,也就是放入 16 个元素的时候Map

或者

  • 当放入 18 个元素时Map
4

4 回答 4

1

负载因子为 80%,因此 16 个元素。它将根据其中的元素总数和当时的最大容量来计算调整大小。

它不会跟踪上次调整大小。

于 2013-11-20T16:57:42.853 回答
1

那将是 16。如果您查看以下 java 代码HashMap

threshold = (int)(newCapacity * loadFactor);

其中新容量是新大小。因此,您的示例中的限制为 16。

于 2013-11-20T16:59:21.237 回答
1

AHashMap有 asize()和 a capacity,这是两个不同的东西。容量是哈希表的内部大小,始终是 2 的幂,因此HashMap容量不能为 20。大小是用户放入此映射的哈希条目的数量。

当你声明一个HashMap

Map map = new HashMap(20)

它的实际容量是 32,阈值是 24。它的大小为零。

Map map = new HashMap()

对于这种情况,地图的大小为 0,默认容量为 16。

门槛

threshold = (int)(newCapacity * loadFactor) = 32 * 0.8 = 25;

对于负载因子 0.8,它是 25。因此,一旦您的地图达到 25 个条目的大小,它将被调整为包含相同 25 个条目的容量 64。

于 2013-11-20T17:05:03.473 回答
0

每次调整地图大小时,阈值都会重新计算为;

threshold = (int)(newCapacity * loadFactor);

所以在你的例子中,它将是 16。

请在此处参考 HashMap 的来源。

于 2013-11-20T17:05:52.870 回答