当我从Map中删除一个元素然后抛出ConcurrentModificationException时发生了什么

时间:2019-11-05 12:04:35

标签: java

  1. 我有一张大地图。我想要的是通过键删除元素。
  2. 所有要删除的键都存储在数组中。
  3. 问题是如下代码,但运行时会引发 ConcurrentModificationException

我是Java的初学者,有人可以帮我解释一下原因以及如何解决它。谢谢大家。

public class MainMap {
    public static void main(String[] args) {
        HashMap<String, Object> map
                = new HashMap<>();
        String[] keys = new String[]{"hobby","address"};
        map.put("name", "Q10Viking");
        map.put("hobby", "football");
        map.put("address", "street-01");
        map.put("score",new BigDecimal(30.9));


        map.forEach((key,val)->{
            if(Arrays.stream(keys).anyMatch(key::equals)){
                map.remove(key);
            }
        });
        System.out.println(map);

    }
}

错误

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.HashMap.forEach(HashMap.java:1292)
    at org.caucoder.formap.MainMap.main(MainMap.java:21)

“我期望输出:”

{name=Q10Viking, score=30.9}

0 个答案:

没有答案