HashMap中哈希码冲突的确切原因

时间:2016-12-16 09:38:26

标签: java hash hashmap hashtable

我知道hashmaps是如何工作的以及它们如何解决冲突。但许多与SO冲突相关的答案都有两个原因:

  • HashCode合约 - 不等对象可以具有相同的哈希码
  • 底层数组大小 - 大小固定,因此当存储区已满时,可以重复使用存储区位置(使用模运算符)。

我的假设是上面的理由2也是正确的,因为我确定原因1.

只有一个问题:

  • Javadoc说hashmap使用LF和Capacity来决定何时重新散列。我理解这是部分调整底层数组的大小。那么上面的理由2怎么可能?????

NB: This question最接近我想要了解的内容。然而,接受的答案似乎完全抛弃了理由2,所以它仍然让我感到疑惑。

1 个答案:

答案 0 :(得分:2)

你的理由2有缺陷。即使存在大量空桶,如果添加最终位于同一桶中的两个(不相等)对象(hashcode%buckets.length),也可以重用桶。这里没有“充满”的元素,除了当桶被填满时,显然更有可能在非空桶中结束。