【发布时间】:2016-04-14 18:04:17
【问题描述】:
好的,所以我最近阅读了很多关于 HashMap 的内容,我认为有些人让它比实际情况更令人困惑。我想知道这个过程是否正确。
因此,如果您有 Key 和 Value,例如 Peter Dirichlet,他出生于 1805-02-13,在本例中为 Key将是 "Peter Dirichlet" 和 Value、"1805-02-13"。
第一步是在Key 上使用哈希函数,即"Peter Dirichlet"。假设哈希函数将其生成到桶 nr 5。这意味着在那个特定的桶中,在索引5 上,键/值对"Peter Dirichlet","1805-02-13" 将被存储。
因此,如果我们要检索此信息,我们使用get("Peter Dirichlet") 并使用哈希函数,将找到索引号并找到键/值对 Peter Dirichlet 1805-02-13。
然后我们遇到了碰撞的情况。假设我们现在有"Leo Euler" 出生"1783-09-18"。并且出于某种原因,我们的哈希函数也将珍贵的 Leo 放入索引号5。由于 Key-Value 不与 Peter Dirichlet 相同,因此不会有替代品。
现在,在第五个“桶”中,我们有 Leo Euler 和 Peter Dirichlet。
如果我们现在要检索 Leo,我们使用get("Leo Euler"),哈希函数将指向我们的存储桶编号 5。 “糟糕”,HashMap 说,“这里发生了冲突”。
然后我们将遍历这些对象,直到找到"Leo Euler".equals("Leo Euler")。所以它会得到key.equals(key)?
因此,我们不会为"Peter Dirichlet" 提供true,而是为Leo 提供true,并返回键/值对。
这是对HashMap 的正确解释吗?
【问题讨论】:
-
是的。在您的情况下,冲突解决方案是链式解决方案,但冲突解决方案还有其他可能性(最重要的是线性探测、二次探测)。
-
好的,我也会考虑的。谢谢。
标签: algorithm data-structures hashmap