有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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.

我错过了什么?我有点困惑

谢谢


共 (2) 个答案

  1. # 1 楼答案

    你把映射的行为和HashMap的实现搞混了

    在映射中,一个键只有一个值——如果为同一个键输入一个新值,旧值将被替换

    HashMap是使用“bucket”(一个大小有限的单元格数组,由键的hashCode索引)实现的

    两个不同的密钥可能散列到同一个存储桶中,这就是“散列冲突”。在发生冲突的情况下,一种解决方案是将(键、值)对放入一个列表中,当从该bucket中获取值时,会对该列表进行搜索。此列表是HashMap内部实现的一部分,对HashMap的用户不可见

    这可能就是你的想法

  2. # 2 楼答案

    对象可能具有相同的hashCode,但同时不相等(冲突)。在这种情况下,两个值都将根据hashCode作为列表。值将由hashCode检索,然后通过equals操作从这些值中获取值