如何在HashMap中发生碰撞时检索值?

Raj*_*tti 1 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.
Run Code Online (Sandbox Code Playgroud)

现在,我想检索与key关联的值"b".我会打电话hm.get("b").因为,hashmap基于密钥的哈希码搜索键/值对.Hashmap会找到209密钥的哈希码"b".因为,为密钥找到相同的哈希码"a",Hashmap可能返回值"aValue"而不是期望值"bValue"

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

Era*_*ran 8

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

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

  • @Razib`hm.get( "B")将返回`bValue`只要`!a.equals(B)`(注意equals`的`使用). (2认同)