地图putAll覆盖或添加?

时间:2013-07-24 07:19:36

标签: java map

当我使用.putAll()时,另一个.putAll()会覆盖地图的内容吗? 我的地图会包含SomeOfMyObjects和SomeOfMyObjects吗?

Map<MyObject> blah = new HashMap<>();
blah.putAll('SomeOfMyObjects')
blah.putAll('SomeOfMyObjects')

谢谢!

4 个答案:

答案 0 :(得分:10)

If you see docs

  

将指定地图中的所有映射复制到此地图(可选操作)。对于在指定映射中从键k到值v的每个映射,此调用的效果等效于在此映射上调用put(k,v)的效果。

this call is equivalent to that of calling put(k, v) 

对于as per put() method

  

将指定的值与此映射中的指定键相关联(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定的值。 (当且仅当m.containsKey(k)返回true时,地图m才包含密钥k的映射。)

所以它永远不会ovverides,只是按照put方法的行为继续进行。

答案 1 :(得分:4)

它的行为就像为参数映射中的每个条目调用“put”一样,因此它会添加,保留地图中已有的任何内容。如果再次添加相同的键,则会覆盖其值。 putAll尝试通过首先在内部扩展地图以适应新数据来优化批量添加,以避免中间调整大小/重新散列操作。

答案 2 :(得分:1)

根据文件: http://docs.oracle.com/javase/6/docs/api/java/util/Map.html#putAll(java.util.Map)它只是添加地图,而不是覆盖内容。

答案 3 :(得分:1)

不确定是否有人发现反对意见。但是,作为Jenkins / Groovy的新用户,我不得不亲自对其进行测试以进行验证,并可以确认是否覆盖了“ put”和“ putAll”。

divisors = np.array(...) # 12 elements
image = np.array(...) # shape (12,773,1231) image
image / divisors[:, np.newaxis, np.newaxis]

        LinkedHashMap test = [X: 1]
        test.put("X", 2)
        assertTrue(test["X"] == 2)