HashMap允许重复?

时间:2013-12-12 07:53:24

标签: java hashmap

我对HashMap有疑问,因为我们都知道HashMap允许一个空键和值对,我的问题是

如果我这样写,

m.put(null,null);
m.put(null,a);

它会抛出(错误或异常)还是会覆盖该值或者什么是returing的值?

6 个答案:

答案 0 :(得分:26)

Hashmap类型如果hashmap键是相同的键,则覆盖该键

map.put("1","1111");
map.put("1","2222");

输出

key:value
1:2222

答案 1 :(得分:10)

HashMap中的每个密钥必须是唯一的。

当“添加重复的密钥”时,旧的值(对于相同的密钥,因为密钥必须是唯一的)被简单地替换;见HashMap.put

  

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

     

返回与键关联的先前值,如果没有键映射,则返回null。

就null而言:允许单个null (因为键必须是唯一的),但HashMap可以有任意数量的null 和一个null键不需要空值。根据{{​​3}}:

  

[.. HashMap]允许空和[a] null

但是,文档说 nothing 关于null / null需要是特定的键/值对或null /“a”无效。

答案 2 :(得分:9)

代码示例:

HashMap<Integer,String> h = new HashMap<Integer,String> ();

h.put(null,null);
h.put(null, "a");

System.out.println(h);

输出:

{null=a}

It overrides the value at key null

答案 3 :(得分:8)

在某种意义上不允许重复,它允许添加你,但它不关心这个键已经有一个值。所以目前一个键只有一个值

它会默默覆盖value null项的null。没有例外。

当您尝试获取时,将返回带有null的最后一个插入值。

这不仅适用于 Map m = new HashMap<String, String>(); m.put("1", "a"); m.put("1", "b"); //no exception System.out.println(m.get("1")); //b ,也适用于任何密钥。

快速举例

{{1}}

答案 4 :(得分:3)

HashMap不允许重复键,但由于它不是线程安全的,因此可能会出现重复键。 例如:

 while (true) {
            final HashMap<Object, Object> map = new HashMap<Object, Object>(2);
            map.put("runTimeType", 1);
            map.put("title", 2);
            map.put("params", 3);
            final AtomicInteger invokeCounter = new AtomicInteger();

            for (int i = 0; i < 100; i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        map.put("formType", invokeCounter.incrementAndGet());
                    }
                }).start();
            }
            while (invokeCounter.intValue() != 100) {
                Thread.sleep(10);
            }
            if (map.size() > 4) {
// this means you insert two or more formType key to the map
               System.out.println( JSONObject.fromObject(map));
            }
        }

答案 5 :(得分:0)

m.put(null,null); // here key =null
m.put(null,a);/here also key=null

哈希图中不允许重复的键。
但是,值可以重复。