2013-07-24 112 views
3

當我使用.putAll()時,另一個.putAll()會覆蓋地圖的內容嗎? 我的地圖是否會包含SomeOfMyObjects和SomeOfMyObjects?映射putAll覆蓋或增加?

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

謝謝!

+4

嘗試一下,你就會知道。這比任何可能的答案都好。 – Maroun

+0

的確,我需要在測試中覆蓋它! – zeroke

回答

6

If you see docs

將所有從指定映射到此地圖(可選操作)的映射。此調用的效果等同於在此映射上爲指定映射中的每個從關鍵字k到值v的映射調用put(k,v)的效果。

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

而對於as per put() method

將指定值與此映射(可選操作)指定的鍵。如果映射先前包含該鍵的映射,則舊值由指定值替換。 (A地圖米據說含有一個密鑰k的映射當且僅當m.containsKey(K)將返回true。)

所以它永遠不會ovverides,只是前進,按照put方法的行爲。

2

它的作用就像在參數圖中爲每個條目調用「put」一樣,因此它添加了保留地圖中已有的任何東西。如果再次添加相同的密鑰,則其值將被覆蓋。 putAll會嘗試通過首先在內部擴展映射以適應新數據來優化批量添加,以避免中間調整大小/重新哈希操作。