2017-08-14 52 views
-1

我有一個靜態的HashMap:添加HashMap來另一

private static HashMap<String, byte[]> mDrawables = new HashMap<>(); 

由線程我下載的圖像作爲一個byte [],我想這個新的HashMap添加靜態HashMap中。

protected void onResult(String srv, HashMap<String, byte[]> drawables) { 
     super.onResult(srv, drawables); 
     mDrawables.putAll(drawables); 
} 

但每次調用的putAll時間,在mDrawables所有信息將被清除。 我怎麼可以添加新的地圖鍵,值靜態一次??

+0

您有重複密鑰嗎? – Xvolks

+0

HashMap不是線程安全的。您必須保護它免受計時問題的困擾。 – Xvolks

+0

@Xvolks,沒有每個鍵是唯一的ID –

回答

1

好,accordint與JavaDoc:

/** 
* Copies all of the mappings from the specified map to this map. 
* These mappings will replace any mappings that this map had for 
* any of the keys currently in the specified map. 
* 
* @param m mappings to be stored in this map 
* @throws NullPointerException if the specified map is null 
*/ 

因此,相同的密鑰將被替換。您可以在一個週期中使用Map#put(),並自行檢查:

for (Map.Entry<String, byte[]> entry : drawables.entrySet()) { 
    if (mDrawables.containsKey(entry.getKey())) { 
     // duplicate key is found 
    } else { 
     mDrawables.put(entry.getKey(), entry.getValue()); 
    } 
} 
+0

。 '在這一行'for(Map.Entry entry = drawables.entrySet()){' –

+0

對不起,修正了它 –