zoukankan      html  css  js  c++  java
  • java.util.ConcurrentModificationException 解决和for循环时对集合remove操作

    ConcurrentModificationException错误很多地方有讲了,是因for循环时进行了remove的原因。具体详解见:https://www.cnblogs.com/snowater/p/8024776.html

    但是上面解决方案是iterator.remove(),迭代器进行remove,又因为迭代器我不会怎么再次遍历,所以迭代器remove了对我的情况没用。我下次还要用这个remove后的集合。

    我的方案是:

    把set或者list转为数组toArray(),每次集合remove后重新生成数组,进行循环。

        public static void main(String[] args) {
            //一下是为了key值在循环的时候能进行remove操作进行的赋值操作
            Set<String> keySet3 = new HashSet<String>();
            keySet3.add("1");
            keySet3.add("5");
            keySet3.add("3");
            keySet3.add("2");
            
            //keySet2对他进行remove操作
            Set<String> keySet2 = new HashSet<String>();
            keySet2.add("1");
            keySet2.add("2");
            keySet2.add("3");
            keySet2.add("4");
            
            for(String key:keySet3){
                Integer keyint=Integer.parseInt(key);
                Set set=new HashSet();
                Object[] array = keySet2.toArray();
                //每次循环都会操作新的array
                for(int i=array.length-1;i>0;i--){
                    Integer key2=Integer.parseInt(array[i].toString());
                    if (keyint>key2) {
                        set.add(array[i]);
                    }else {
                        break;
                    }
                }
                keySet2.removeAll(set);
            System.out.println("----去除操作后keySet2的值"+keySet2.toString());
            }
            System.out.println("----最终去除操作后keySet2的值"+keySet2.toString());
        }

    如上;

    外层for每次循环都会执行内部循环的新数组;

  • 相关阅读:
    javascript运行机制之执行顺序详解
    js常见错误类型
    原生JS添加类名 删除类名
    innerHTML、innerText和outerHTML、outerText的区别
    cmd应用基础教程
    ASIC中的一些库和文件类型
    VCS中的覆盖率分析
    NC_Verilog中的工具ICC
    UVM中的sequence使用(一)
    UVM中的regmodel建模(三)
  • 原文地址:https://www.cnblogs.com/daguozb/p/10120150.html
Copyright © 2011-2022 走看看