地图加载因子,地图如何增长

时间:2013-11-20 16:54:11

标签: java load-factor

根据我的理解,以及我读过的内容

  

加载因子是衡量哈希表在其容量自动增加之前可以获得多长的度量

因此,当loadfactor为.8(80%)时,如果地图大小为10,那么当Map中放入8个元素时,Map将增加10个大小。

所以,现在Map的大小为20.我怀疑是将下一个10个元素空间添加到Map

  • Map再次满80%时,即将{16}个元素放入Map

  • 当18个元素放入Map

4 个答案:

答案 0 :(得分:1)

Loadfactor为80%,因此有16个元素。它将根据当时元素的总量和当时的最大容量来计算调整大小。

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

答案 1 :(得分:1)

那将是16岁。如果你看一下HashMap的java代码:

threshold = (int)(newCapacity * loadFactor);

新容量是新尺寸。因此,示例中的限制为16。

答案 2 :(得分:1)

HashMapsize()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个条目的大小,它将被调整为容量64,包含相同的25个条目。

答案 3 :(得分:0)

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

threshold = (int)(newCapacity * loadFactor);

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

请参阅HashMap的来源here