迭代并從地圖中刪除我在做:for (Object key : map.keySet())
if (something)
map.remove(key);它引發了一個ConcurrentModificationException,所以我將其更改為:for (Object key : new ArrayList<Object>(map.keySet()))
if (something)
map.remove(key);這個,以及修改地圖的任何其他過程都在同步塊中。有更好的解決方案嗎?如果沒有人想出一個更好的解決方案,首先要說沒有得到勾號;)
3 回答

元芳怎么了
TA貢獻1798條經驗 獲得超7個贊
從Java 8開始,您可以按如下方式執行此操作:
map.entrySet().removeIf(e -> <boolean expression>);

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
下面是一個代碼示例,它在for循環中使用迭代器來刪除條目。
Map<String, String> map = new HashMap<String, String>() { { put("test", "test123"); put("test2", "test456"); }};for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext(); ) { Map.Entry<String, String> entry = it.next(); if(entry.getKey().equals("test")) { it.remove(); }}

臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
使用真正的迭代器。
Iterator<Object> it = map.keySet().iterator();while (it.hasNext()){ it.next(); if (something) it.remove(); }
實際上,您可能需要迭代entrySet()
而不是keySet()
使其工作。
添加回答
舉報
0/150
提交
取消