哈希桶的数量

Lea*_*ner 8 java hashmap

HashMap文档中,提到:

  • 初始容量是简单地在时间中创建哈希表中的容量
  • 容量是在哈希表中桶的数量.

现在假设我们的初始容量为16(默认值),如果我们继续添加100个元素,则hashmap的容量为100*loadfactor.

散列桶的数量是100还是16?

编辑:
从我读到的解决方案:存储桶不仅仅是添加的元素.以此为观点:因此,如果我们将字符串添加为键,我们将获得一个元素/存储桶,从而导致大量空间消耗/复杂性,我的理解是正确的吗?

Ada*_*cin 9

既不是100也不是16桶.最有可能会有256个存储桶,但文档无法保证这一点.

更新的文档链接:

加载因子是在自动增加容量之前允许哈希表获取的完整程度的度量.当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表具有大约两倍的桶数.

(强调我的)

因此,如果我们忽略上面的"大约"一词,我们确定每当哈希表变为75%满(或者在构造函数中指定的任何加载因子)时,哈希桶的数量加倍.这意味着每当插入第12,24,48和96个元素时,桶的数量就会翻倍,总共会有256个桶.

但是,正如我在文档片段中强调的那样,这个数字大约是之前大小的两倍,所以它可能不是256.事实上,如果倒数第二次加倍被稍微大一点的加倍所取代,那么最后的加倍可能是永远不会发生,所以最终的哈希表可能只有134个桶,或者可能大于256个元素.

注:我来到了134号,因为它是最小的整数N这样0.75 * N > 100.