• 解决循环删除list中元素ConcurrentModificationException异常问题


    当我们使用for循环删除列表中的数据的时候,会存在问题,因为ArrayList的父类AbstractList里有个modCount的字段记录着List的总数,for循环的时候如果增加或者删除了元素,(修改不会影响),此字段会变化,那么在下次for循环的时候检查到跟之前的长度不同,此时会报ConcurrentModificationException异常。
    错误代码:

    for (Stuff stuff:mStuffs){
    if (stuff.getDelete().equals(true)){
    mStuffs.remove(stuff);
    }
    }
    查到一个解决方法23行,我都懒得看
    下面是我自己想的解决方法:(大概思想就是直接把不用删除的存到一个List中,最后把原list替换为不用删除的List中)
    解决代码:
    mStuffList = new ArrayList<>();
    for (Stuff stuff:mStuffs){
    if (stuff.getDelete().equals(false)){
    mStuffList.add(stuff);
    }
    }
    mStuffs.clear();
    mStuffs.addAll(mStuffList);
    mStuffList.clear();


    注:mStuffs是原list,mStuffList是不用删除的list;

    本人第一次写博客,写的不好的地方请指出,谢谢!写的不清楚的地方欢迎提问。
  • 相关阅读:
    模拟赛2020.9.11
    棋盘(dfs)
    树的重心
    模拟赛9.4
    最大数(线段树)
    [模板] 线段树
    [模板][数据结构] 树状数组
    [AHOI2018初中组][二分查找] 分组
    [模板] Kruskal 求最小生成树
    [模板] 最近公共祖先(LCA)的几种求法
  • 原文地址:https://www.cnblogs.com/xiaolumax/p/10463314.html
Copyright © 2020-2023  润新知