根据我的理解,以及我读过的内容
加载因子是衡量哈希表在其容量自动增加之前可以获得多长的度量
因此,当loadfactor为.8(80%)时,如果地图大小为10,那么当Map
中放入8个元素时,Map
将增加10个大小。
所以,现在Map
的大小为20.我怀疑是将下一个10个元素空间添加到Map
。
Map
再次满80%时,即将{16}个元素放入Map
。或
Map
。答案 0 :(得分:1)
Loadfactor为80%,因此有16个元素。它将根据当时元素的总量和当时的最大容量来计算调整大小。
它不会跟踪上次调整大小。
答案 1 :(得分:1)
那将是16岁。如果你看一下HashMap
的java代码:
threshold = (int)(newCapacity * loadFactor);
新容量是新尺寸。因此,示例中的限制为16。
答案 2 :(得分:1)
HashMap
有size()
和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。