我如何获得与密钥相关的值?
假设,我的代码编写如下:
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"
所以,这是我的问题,我想检索与密钥相关的值。我该怎么做?
答案 0 :(得分:8)
HashMap
知道如何处理具有相同hashCode
的多个密钥。只要两个密钥彼此不相等(使用密钥所属的类的equals
),HashMap
就可以区分它们,即使它们共享相同的hashCode
。< / p>
当两个不同的键具有相同的hashCode
时,它们将存储在与hashCode
对应的地图索引中的链表结构中。当您搜索其中一个密钥(通过调用get
或containsKey
)时,HashMap
将找到与hashCode
对应的地图索引并搜索链接列表按顺序排列,使用equals
标识所请求的密钥。
答案 1 :(得分:1)
现在,我想检索与键“b”相关联的值。
行。
我将调用hm.get(“b”)。
这就是你所要做的一切。
因为,hashmap根据key的hashcode搜索键/值对。 Hashmap将为密钥“b”找到209哈希码。
正确。或者“b”的哈希码是什么。
因为,为密钥“a”找到相同的哈希码,Hashmap可能返回值“aValue”而不是期望值“bValue”
没有。你误会了。它已经正常工作。你不必担心它。