Hashmap:当我们放置相同的键时,地图如何工作

时间:2019-06-20 17:56:16

标签: java hashmap

Map<String, String> map = new HashMap<String, String>();

我知道地图的内部工作。如果两个键的哈希码相同,则会发生冲突,并将其存储在链表中。但是如果再次输入该键怎么办。

对此有任何检查吗?还是会简单地替换该值而不检查?

详细说明

map.put("sparsh", "sparsh");
map.put("sparsh", "1");

它将值“ sparsh”替换为“ 1”

map.put("sparsh", "1");
map.put("sparsh", "1");

在上述情况下,会发生什么替换?

以及与上述问题不同的上下文

System.out.println(map.put("sparsh", "sparsh"));
System.out.println(map.put("sparsh", "1"));

首先给我“ null”,然后给我“ sparsh”(键)。如果有人对此有所了解,其背后的原因是什么。

3 个答案:

答案 0 :(得分:3)

看跌合约为:

  • 当键未知时,您添加新的键/值对
  • 知道键后,您更新(覆盖)现有键/值对的值。

在您的情况下,您无法观察到“输入”新值或保留旧值之间的区别。具有两个值的两个字符串始终相等,因此无论如何都没有关系。

但是然后:您可以轻松地构造一个示例(使用具有两个字段的类),其中两个对象等于,但是具有不同的值(因为两个字段中的一个仅用于equals()实现)。

因此,新值必须进入地图,即使它与已经存在的值等于也是如此。

答案 1 :(得分:3)

摘自Map::put的文档:

V put(K key, V value)
     

返回值: 与键关联的先前值,如果存在则返回null   没有键的映射。 (返回null也可以表示该地图   如果实现支持,先前与null关联的键   空值。)

这是什么意思

将条目添加到地图时:

  • 如果存在具有该键的条目,则它将返回最后一个值,
  • 否则,您将在示例中返回null。

以下是带有多个看跌期权的示例:

System.out.println(map.put("key", "v1")); // null
System.out.println(map.put("key", "v2")); // v1
System.out.println(map.put("key", "v3")); // v2
System.out.println(map.put("key2", "v4")); // null

答案 2 :(得分:1)

java.util.Map.put(key, value)返回与同一键关联的先前值。

因此,最初,没有与键相关联的值,因此第一个map.put("sparsh", "sparsh")返回null。

然后,由于地图中有key: sparsh, value: sparsh,因此调用map.put("sparsh", "1")将返回先前的值,如"sparsh"