• 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每次循环都会执行内部循环的新数组;

  • 相关阅读:
    iOS 数据存储
    iOS 中@property() 括号中,可以填写的属性?
    iOS 中关闭键盘方法
    iBeacons 资源汇总
    iOS7 下去掉状态栏(全屏)
    监听器HttpSessionListener
    监听器 HttpSessionBindingListener
    servlet 3.0 的使用
    工厂模式小例子 getDaoImp
    servlet和filter初始化
  • 原文地址:https://www.cnblogs.com/daguozb/p/10120150.html
Copyright © 2020-2023  润新知