根据我的理解,以及我所读到的
负载因子是哈希表在其容量自动增加之前允许达到的程度的度量
因此,当 loadfactor 为 .8(80%),地图大小为 10Map
时,当放入 8 个元素时,大小将增长 10 Map
。
所以,现在Map
大小为 20。我怀疑下一个 10 元素空间何时会添加到Map
.
- when
Map
又是 80% 满了,也就是放入 16 个元素的时候Map
。
或者
- 当放入 18 个元素时
Map
。
根据我的理解,以及我所读到的
负载因子是哈希表在其容量自动增加之前允许达到的程度的度量
因此,当 loadfactor 为 .8(80%),地图大小为 10Map
时,当放入 8 个元素时,大小将增长 10 Map
。
所以,现在Map
大小为 20。我怀疑下一个 10 元素空间何时会添加到Map
.
Map
又是 80% 满了,也就是放入 16 个元素的时候Map
。或者
Map
。负载因子为 80%,因此 16 个元素。它将根据其中的元素总数和当时的最大容量来计算调整大小。
它不会跟踪上次调整大小。
那将是 16。如果您查看以下 java 代码HashMap
:
threshold = (int)(newCapacity * loadFactor);
其中新容量是新大小。因此,您的示例中的限制为 16。
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。
每次调整地图大小时,阈值都会重新计算为;
threshold = (int)(newCapacity * loadFactor);
所以在你的例子中,它将是 16。
请在此处参考 HashMap 的来源。