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

Gur*_*lki 12 java collections dictionary interface

Map.putAll相当于Map.put(k, v)在指定映射中从键k到值v的每个映射调用一次映射.所以功能方面,两者都是一样的.

所以,我很想知道其他差异是什么,何时使用哪一个?

And*_*s_D 9

这取决于.

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

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

当然,一个简单的实现会调用put源映射的每个条目,但也许有人发明了另一种方法来实现目标.或者putAll在输入添加对之前/之后/将执行一些其他地图内部内容.

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


Chr*_*röm 5

使用putAll(Map)时,你有一个地图,你要添加到您的地图,并使用几个值put(K,V),当你有一个或一对夫妇要添加到您的地图值.

putAll(Map)在大多数实现中,只需调用put(K,V)循环,读取源代码.

  • 最后一行有点误导.尽管AbstractMap _does_按您的描述工作,但其他具体的Map实现却没有. (3认同)

Har*_*Joy 5

如文档中所述:

Map.put

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

允许您在地图中放置单个键值对.

Map.putAll

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

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


什么时候使用哪一个?

如果要将完整数据从一个地图复制到另一个地图,则可以使用map.putAll其他功能,您只需添加一个键值对即可map.put.


对于在指定映射中从键k到值v的每个映射,Map.putAll等效于在地图上调用Map.put(k,v)的一次.所以功能方面都是一样的.

不是当您在hasmap中实现地图然后使用put(k,v)将一个地图复制到另一个地图将需要更多努力,您可以使用putAll(m)说更多编码我们可以使用单行代码复制地图.


njl*_*son 5

由于 Map 只是一个接口,没有任何实现,所以 putAll 和重复 put 之间没有任何区别,除了您所说的功能方面。换句话说:不可能有任何区别。然而,如果您查看 Map 的各个实现(例如 HashMap),性能可能会有所不同。对于任何合理的实现,一次 putAll 应该至少与重复 put 一样有效,但它可能完全相同。

  • +1 - 你打败了我......你回答了OP的问题,而不是仅仅背诵API细节。 (3认同)