【问题标题】:Hashmap : How map works when we put same key [duplicate]Hashmap:当我们放置相同的键时地图如何工作[重复]
【发布时间】:2019-11-03 14:23:42
【问题描述】:
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”(key)。这背后的原因是什么,如果有人对此有所了解的话。

【问题讨论】:

  • 来自Map.put的javadocs:将指定的值与此映射中的指定键相关联(可选操作)。 如果映射先前包含键的映射,则旧值将替换为指定值返回:与键关联的先前值 , 如果没有 key 映射,则返回 null。 这回答了你的两个问题。

标签: java hashmap


【解决方案1】:

看跌合约为:

  • 当密钥未知时,您添加一个新的键/值对,
  • 当键已知时,您更新(覆盖)现有键/值对的值。

在您的情况下,您无法观察“输入”新值或保留旧值之间的区别。具有两个值的两个字符串总是相等的,因此这并不重要。

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

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

【讨论】:

    【解决方案2】:

    来自Map::put 的文档:

    V put(K key, V value)
    

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

    这是什么意思

    当您向地图添加条目时:

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

    这是一个包含多个 put 的示例:

    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
    

    【讨论】:

      【解决方案3】:

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

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

      那么,既然地图中有key: sparsh, value: sparsh,调用map.put("sparsh", "1")会返回之前的值,就像"sparsh"一样

      【讨论】:

      • 我忘了提到那部分,很高兴现在有人这样做了,并且省去了我再次编辑答案的工作;-)
      猜你喜欢
      • 2018-03-25
      • 2021-08-30
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多