迭代并從地圖中刪除我在做: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
提交
取消
