当我使用.putAll()
另一个.putAll()
会覆盖地图的内容时?我的地图会包含 SomeOfMyObjects 和 SomeOfMyObjects 吗?
Map<MyObject> blah = new HashMap<>();
blah.putAll('SomeOfMyObjects')
blah.putAll('SomeOfMyObjects')
谢谢!
它的行为就像调用put(k,v)
参数映射中的每个条目一样,因此它添加,保留映射中已经存在的任何内容。如果k
再次添加相同的键,则其值v
将被覆盖。putAll()
尝试通过首先在内部扩展映射以容纳新数据来优化批量添加,以避免中间调整大小/重新散列操作。
不知道其他人是否发现上述反对意见。但作为一个新的 Jenkins/Groovy 用户,我必须自己测试它以验证并确认它覆盖了“put”和“putAll”。
LinkedHashMap test = [X: 1]
test.put("X", 2)
assertTrue(test["X"] == 2)
和
LinkedHashMap test = [X: 1]
LinkedHashMap test2 = [X: 2]
test.putAll(test2)
assertTrue(test["X"] == 2)
根据文档,它只是添加了地图,并没有覆盖内容:
这个调用的效果等价于在这个map上调用put(k, v)一次,每次从key k到指定map中的值v的映射
并在put(k,v)
:
如果映射先前包含键的映射,则旧值将替换为指定值。(当且仅当 m.containsKey(k) 返回 true 时,映射 m 被称为包含键 k 的映射。)
因此,使用此定义,它会用新值覆盖现有键。