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

 

posted @ 2018-12-14 16:30  五星上酱程序员  阅读(1194)  评论(0编辑  收藏  举报