在HashMap实现中调整数组表的大小

时间:2020-08-20 12:59:19

标签: java hashmap bucket

对于那些了解HashMap的内部实现的人来说,这是一个简单的问题:)

初始大小为16个铲斗,装载系数为0.75。意思是当它得到(观看该单词)12时,其大小将调整为32个存储桶。

我的问题是,当它获得12个键-值对或当它获得12个“填充”存储桶时,它的大小会从16个调整为32个存储桶吗?我之所以这么问,是因为这可能会导致从这16个存储桶中将所有12个键值对插入同一存储桶。在这种情况下,调整大小会很奇怪,因为其他15个都是空的。

谢谢,对此有任何意见:)

2 个答案:

答案 0 :(得分:2)

来自JavaDoc https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#put-K-V-

When the number of entries in the hash table exceeds the product of the load factor and the current capacity, the hash table is rehashed (that is, internal data structures are rebuilt) so that the hash table has approximately twice the number of buckets.

因此,当HashMap具有12个键值对时,将调整其大小。这并不奇怪,因为调整大小后,条目将更改其存储桶。

答案 1 :(得分:2)

this link中所述。

它表示哈希映射的第12个键值对将其大小保持为16。一旦第13个元素(键值对)进入Hashmap,它将从默认值 2 ^ 4增大其大小。 = 16 个存储桶到 2 ^ 5 = 32 个存储桶。

独立于每个键的插入位置,当负载系数和当前容量的乘积超过时,将调整表的大小。

在达到负载因子之前,HashMap不会在意使用了多少个存储桶,它知道发生碰撞的可能性变得太大,因此应该调整地图的大小。即使发生了很多碰撞。