Map.put 和 Map.putAll 方法的区别?

2022-09-03 17:31:28

Map.putAll等效于对指定映射中从键 k 到值 v 的每个映射在映射上调用一次的调用。因此,在功能方面,两者是相同的。Map.put(k, v)

所以,我很好奇其他区别是什么,什么时候使用哪一个?


答案 1

嗯,这要视情况而定。

put并且是接口方法,因此该接口的每个实际实现都将保证,该方法将单个键/值对放在映射中,同时将放置来自源的所有键/值对。putAllputputAll

但这取决于实现者如何做到这一点以及另外做什么(内部)。

当然,一个微不足道的实现会调用源映射的每个条目,但也许有人发明了另一种方法来实现目标。或者在输入添加对之前/之后/期间做一些其他的映射内部工作。putputAll

我的经验法则是:如果你必须将所有键/值对从一个映射放到另一个映射,那么依靠实现者的聪明才智并使用该方法。它总是很有可能提供比手动调用所有对更好的性能。putAllput


答案 2

如文档中所述:

Map.put

将指定值与此映射中的指定键相关联(可选操作)。如果映射以前包含键的映射,则旧值将替换为指定的值。(映射 m 被称为包含键 k 的映射,当且仅当 m.containKey(k) 将返回 true。

允许您将单个键值对放在映射中。

Map.putAll

将所有映射从指定的映射复制到此映射(可选操作)。此调用的效果等效于对指定映射中从键 k 到值 v 的每个映射在此映射上调用 put(k, v) 一次的效果。如果在操作过程中修改了指定的映射,则此操作的行为未定义。

将所有数据从一个地图放到另一个地图。


何时使用哪一个?

如果要将完整数据从一个映射复制到另一个映射,则可以使用 其他方法,只需使用 添加一个键值对即可。map.putAllmap.put


Map.putAll 等效于对指定映射中从键 k 到值 v 的每个映射在映射上调用 Map.put(k, v) 一次。因此,在功能方面,两者是相同的。

否,当您在 hasmap 中实现 map 时,使用 put(k,v) 将一个 map 复制到另一个 map 将需要更多的努力,你可以说使用 putAll(m) 进行更多的编码,我们可以用一行代码复制 map。