【问题标题】:How to retrive values when collision occured in HashMap?HashMap中发生冲突时如何检索值?
【发布时间】:2015-03-22 09:01:02
【问题描述】:

如何获取与键关联的值?

假设,我的代码如下:

Hashmap hm = new Hashmap();`

hm.put("a","aValue"); // Suppose hashcode created for key "a" is 209

hm.put("b","bValue"); // Here hashcode created for key "b" is 209 as well.

现在,我想检索与键 "b" 关联的值。我会打电话给hm.get("b")。因为,hashmap 根据键的哈希码搜索键/值对。 Hashmap 将为键 "b" 找到 209 哈希码。由于为键 "a" 找到了相同的哈希码,因此 Hashmap 可能返回值 "aValue" 而不是预期值 "bValue"

所以,这是我的问题,我想检索与键关联的值。我将如何做到这一点?

【问题讨论】:

    标签: java collections hashmap


    【解决方案1】:

    HashMap 知道如何处理具有相同hashCode 的多个键。只要两个key不相等(使用key所属类的equals),HashMap即使共享同一个hashCode也可以区分它们。

    当两个不同的键具有相同的hashCode 时,它们将存储在与hashCode 对应的映射索引中的链表结构中。当您搜索其中一个键时(通过调用getcontainsKey),HashMap 将找到与hashCode 对应的映射索引,并使用@987654332 按顺序搜索链表中的条目@ 标识请求的密钥。

    【讨论】:

    • 所以只有 hm.get("b") 会返回 bValue,如果 a!=b?
    • @Razib hm.get("b") will return bValue` 只要!a.equals(b)(注意equals的用法)。
    【解决方案2】:

    现在,我想检索与键“b”关联的值。

    好的。

    我会调用 hm.get("b")。

    这就是你所要做的。

    从那时起,hashmap 会根据 key 的 hashcode 搜索 key/value 对。 Hashmap 将为键“b”找到 209 个哈希码。

    正确。或者“b”的哈希码是什么。

    由于为键“a”找到相同的哈希码,Hashmap 可能返回值“aValue”而不是预期值“bValue”

    没有。你误会了。它已经正常工作了。您不必担心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2011-10-17
      相关资源
      最近更新 更多