如何在HashMap中发生冲突时检索值?

时间:2015-03-22 09:01:02

标签: java collections hashmap

我如何获得与密钥相关的值?

假设,我的代码编写如下:

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会为密钥209找到"b"哈希码。因为,为密钥"a"找到了相同的哈希码,Hashmap可能返回值"aValue"而不是预期值"bValue"

所以,这是我的问题,我想检索与密钥相关的值。我该怎么做?

2 个答案:

答案 0 :(得分:8)

HashMap知道如何处理具有相同hashCode的多个密钥。只要两个密钥彼此不相等(使用密钥所属的类的equals),HashMap就可以区分它们,即使它们共享相同的hashCode。< / p>

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

答案 1 :(得分:1)

  

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

行。

  

我将调用hm.get(“b”)。

这就是你所要做的一切。

  

因为,hashmap根据key的hashcode搜索键/值对。 Hashmap将为密钥“b”找到209哈希码。

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

  

因为,为密钥“a”找到相同的哈希码,Hashmap可能返回值“aValue”而不是期望值“bValue”

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