zoukankan      html  css  js  c++  java
  • 迭代删除元素 并发bug 低级错误

    方法一:
    HashMap<String, Integer> myHashMap = new HashMap<>();
    myHashMap.put("1", 1);
    myHashMap.put("2", 2);
    for (Map.Entry<String, Integer> item : myHashMap.entrySet()){ myHashMap.remove(item.getKey());}
    myHashMap.remove(item.getKey());
    }

    运行上面的代码,Java抛出了java.util.ConcurrentModificationException 的异常,上述方法肯定不行,原因是java中List,set,map类型在遍历时不允许修改元素

    方法二:

    Iterator<Map.Entry<String, Integer>> it = myHashMap.entrySet().iterator();
    while(it.hasNext()){
        Map.Entry<String, Integer> item = it.next();

        if(item满足某个条件){myHashMap.remove(item.getKey());}

    }

    方法二也是一样会报错。

    方法三:

    Iterator<Map.Entry<String, Integer>> it = myHashMap.entrySet().iterator();
    while(it.hasNext()){
        Map.Entry<String, Integer> item = it.next();

        if(item满足某个条件){it.remove();}

    }

    方法三ok,remove的时候只能对迭代器遍历it进行操作才可以

  • 相关阅读:
    安装Manjaro KDE 18.04
    nltk 词性解析
    Ubuntu安装Hadoop
    Ubuntu安装JDK
    Python3-Cookbook总结
    linux 条件变量
    多线程编程 ------ 互斥量
    线程相关笔记
    realloc ------ 扩大malloc得到的内存空间
    gcc 消除未使用变量的警告
  • 原文地址:https://www.cnblogs.com/vana/p/9303754.html
Copyright © 2011-2022 走看看