java - 哈希桶的数量

标签 java hashmap

HashMap文档中提到:

  • 初始容量就是哈希表创建时的容量
  • 容量是哈希表中桶的数量。

现在假设我们的初始容量为 16(默认),如果我们不断添加元素到 100 个,则 hashmap 的容量为 100 * loadfactor。

哈希桶的数量是100还是16?

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

最佳答案

既不是 100 桶也不是 16 桶。很可能会有 256 个存储桶,但文档并不能保证这一点。

来自updated documentation link :

The load factor is a measure of how full the hash table is allowed to get before its capacity is automatically increased. 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.

(强调我的)

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

但是,正如我在文档片段中强调的那样,这个数字大约是之前大小的两倍,因此它可能不正好是 256。事实上,如果倒数第二个倍增被替换稍大一点的增加,最后的翻倍可能永远不会发生,所以最终的哈希表可能小到 134 个桶,也可能大于 256 个元素。

注意我得到 134 这个数字是因为它是满足 0.75 * N > 100 的最小整数 N

关于java - 哈希桶的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379433/

相关文章:

java - 锁定数据库记录以实现线程间的并发

java - 无法从多线程 Java 聊天室退出用户

java - 使用序列图编码

java - 对于一般情况,当任何一个都可以工作时,hashmap 还是 hashtable 哪个更好用?

Java:将 "VK_UP"更改为 KeyEvent.VK_UP

java - 如何在 Java 中使用必填字段构建可重用的动态输入逻辑

java - JNLP - application-desc 与 applet-desc - 当不在浏览器中运行时,一个比另一个更好?

java - 根据值在 map 上排序

java - 什么是更快的哈希集清除或新的哈希集?

java - Java HashMap 是否要求值不可变?