2015-06-20 71 views
-2

以下代碼段,而由單個線程執行時,將引發在第4行一個​​:HashMap中的迭代器,以防止併發修改

Map<String, String> map = new HashMap<String, String>(); 
map.put("key1", "value1"); 
map.put("key2", "value2"); 
for (String key : map.keySet()) { // Here 
    map.remove(key); 
} 

我無法找到任何Map.iterator()Map.mapIterator()方法上HashMap Javadoc。 我該怎麼辦?

+2

你的問題看起來像[XY問題(HTTP:// meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你想做什麼?現在看起來你正在試圖重新創建'map.crear()'方法,或'map.keySet()。clear()'或者甚至是'map.values()。clear();'。 – Pshemo

+0

@Pshemo有一個更復雜的場景,我更喜歡從頭開始寫一個[MCVE](http://stackoverflow.com/help/mcve)。 –

回答

2

正如您猜測的那樣,您需要一個iterator用於在迭代過程中移除項目。用Map做到這一點的方法是迭代entrySet()(或者,在keySet(),如果你只需要評估的關鍵):

Iterator<Map.Entry<String, String>> entryIter = map.entrySet().iterator(); 
while (iter.hasNext()) { 
    Map.Entry<String, String> entry = iter.next(); 
    iter.remove(); // Probably guard this by some condition? 
}