【问题标题】:Why don't I get a runtime exception for key duplication?为什么我没有得到密钥复制的运行时异常?
【发布时间】:2013-08-27 09:40:31
【问题描述】:

在名为mapHashMap 中,我复制了keys,但我仍然没有得到任何密钥复制的运行时异常。为什么会这样?

地图数据结构不能有重复的键。

import java.util.*;

class KeyTest {
    public static void main(String args[]) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("key-1","val");
        map.put("key-1","val");
        map.put("key-1","val");
        map.put("key-1","val");
        map.put("key-1","val");
    }
}

【问题讨论】:

  • 为什么要抛出异常?你为什么要它?文档是怎么说的?

标签: java map key


【解决方案1】:

你不会得到任何exception。它只是用key覆盖现有的value

HashMap#Put()的文档中也提到了

将指定值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。

 map.put("key-1","val1");
 map.put("key-1","val2");

在这种情况下,key key-1 的当前 value"val2" ,因为 "val1" 已被替换。

【讨论】:

    【解决方案2】:

    根据Map#put

    将指定值与此映射中的指定键关联(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定值。

    返回:
    与 key 关联的前一个值,如果没有 key 映射,则返回 null。 (如果实现支持 null 值,则返回 null 还可以指示映射先前将 null 与 key 关联。)

    【讨论】:

      【解决方案3】:

      Map.put 不会在重复键上引发异常。可以测试put的返回值,如果不是null那么key是重复的。如果是null,则取决于具体的地图实现是否允许空值。 HashMap 会。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多