java HashMap如何链接?如何访问所有碰撞值?

Raj*_*ula 4 java collections data-structures

我在某处读过HashMap使用链接来解决冲突.但如果是这样的话.如何访问具有相同键值的所有元素.

例如 :

HashMap<Integer, String> hmap = new HashMap<Integer, String>();
hmap.put(1, "1st value");
hmap.put(1, "2nd value");
hmap.put(1, "3rd value");
hmap.put(1, "4th value");
Run Code Online (Sandbox Code Playgroud)

现在,如果我做hmap.get(1)它返回"第四个值"

如果确实它确实像链接一样

键值1"第四值"--->"第三值"--->"第二值"---->"第一值"

我怎样才能获得其他值?

hmap.get(1) 只返回第一个值.

我的第二个问题是,

如果它做线性链接.如何删除键的任何一个值.假设我想从我的hashmap中删除"4th value"并希望保留相同键的所有其他值,我该怎么办?

如果我做

hmap.remove(1);

,它删除了完整的链.

axt*_*avt 11

HashMap 无法为同一个密钥存储多个值.

链接用于解决散列冲突,即不同键具有相同散列的情况.因此,它不是关于使用相同的键存储多个值,而是关于其键具有相同哈希值的多个值.

可以为同一个密钥存储多个值的数据结构称为多图.不幸的是,JRE中没有内置的multimap实现.

如果你需要一个多重映射,你可以保持MapListS(由matsev的建议),或使用现有的多重映射实现从第三方库,如谷歌番石榴.

也可以看看: