Java哈希映射请解释哈希映射是如何工作的
我目前正在准备面试,尤其是Java
一个常见的问题是解释哈希映射
每种解释都说,如果每个键都有多个值,那么这些值将被链接到bucket
现在,在HashMap类中,当我们使用put()时,键已经在映射中,该值不会链接到现有的值(据我所知,在列表中),而是替换它:
Map<String, Integer> map = new HashMap();
map.put("a", 1);
//map now have the pair ["a", 1]
map.put("a", 2);
//map now have the pair ["a", 2]
//And according to all hash maps tutorials, it should have been like: ["a", 1->2]
从文件中:
If the map previously contained a mapping for the key, the old value is replaced.
我错过了什么?我有点困惑
谢谢
# 1 楼答案
你把映射的行为和HashMap的实现搞混了
在映射中,一个键只有一个值——如果为同一个键输入一个新值,旧值将被替换
HashMap是使用“bucket”(一个大小有限的单元格数组,由键的hashCode索引)实现的
两个不同的密钥可能散列到同一个存储桶中,这就是“散列冲突”。在发生冲突的情况下,一种解决方案是将(键、值)对放入一个列表中,当从该bucket中获取值时,会对该列表进行搜索。此列表是HashMap内部实现的一部分,对HashMap的用户不可见
这可能就是你的想法
# 2 楼答案
对象可能具有相同的
hashCode
,但同时不相等(冲突)。在这种情况下,两个值都将根据hashCode作为列表。值将由hashCode检索,然后通过equals
操作从这些值中获取值