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