【发布时间】:2016-12-16 09:38:26
【问题描述】:
我知道哈希图的工作原理以及它们如何解决冲突。但是许多与 SO 上的冲突相关的答案都指向两个原因:
- HashCode 契约 - 不相等的对象可以有相同的哈希码
- 基础数组大小 - 大小是固定的,因此当桶位置已满时可以重复使用(使用模运算符)。
我的假设是上面的原因 2 也是正确的,我确信原因 1。
只有 1 个问题:
- Javadoc 说哈希图使用 LF 和容量来决定何时重新哈希。我将其理解为部分调整底层数组的大小。那么上面的原因2怎么可能呢????
NB: This question 最接近我想了解的内容。然而,接受的答案似乎完全放弃了原因 2,所以它仍然让我想知道。
【问题讨论】:
-
Hashmap 根据容量调整大小(当 LF * 容量
-
@LaurentB 这不是真的。如果检测到冲突,则不会调整大小。
-
@Kayaman 抱歉,只有在存储桶已满且达到容量时才重新读取源代码 (1.7)
-
@LaurentB 我的问题是底层数组的大小如何导致冲突?
-
嗯,一个更小的数组显然有更高的碰撞机会。如果你随机决定是把 2 个球扔进 2 个桶还是 10 个桶,哪个更有可能最终在同一个桶里有 2 个球?你确定你知道哈希图是如何工作的吗?
标签: java hash hashmap hashtable