java的List遍历的时候不能删除元素

实际开发碰到List不能删除元素的情况,仔细测试总结了下,如果有不完整不完美的地方,欢迎大佬指正:

public class ListIsRemove {
public static void main(String[] args) {
List list = new ArrayList();
for(int i =0;i<10;i++){
list.add(i+1+"");
}
//第一种遍历方式
//元素个数<=2时,删除1不会报错,删除2会报错,元素个数大于2时,会直接报错。底层原理这里不讨论,只推荐靠谱的删除方式
/**
* Exception in thread “main” java.util.ConcurrentModificationException
at java.util.ArrayList I t r . c h e c k F o r C o m o d i f i c a t i o n ( A r r a y L i s t . j a v a : 909 ) a t j a v a . u t i l . A r r a y L i s t Itr.checkForComodification(ArrayList.java:909) at java.util.ArrayList Itr.checkForComodification(ArrayList.java:909)atjava.util.ArrayListItr.next(ArrayList.java:859)
at com.wangyi.list.ListIsRemove.main(ListIsRemove.java:22)
/
/
for(String list1:list){
if(“1”.equals(list1) ){
list.remove(list1);
}
}
System.out.println(list);*/

    //第二种遍历方式
    //这种遍历方式有时候不能根据条件删除元素,会跳过某些元素,下边这种情况就不能删除list中的元素2
  /*  for (int j = 0; j < list.size(); j++) {
        if("1".equals(list.get(j)) || "2".equals(list.get(j)) ){
            list.remove(j);
           //矫正方式:修正index,否则不会出现异常,但是会略过某些元素
          //  j=j-1;     
        }
    }
    System.out.println(list);*/
  
  //第三种遍历方式,倒叙方式,暂且没有发现问题
    /*for(int i=list.size()-1;i>=0;i--){
        if("1".equals(list.get(i)) || "2".equals(list.get(i)) ) {
            list.remove(i);
        }
    }
    System.out.println(list); */
    
    //第四种 迭代器方式移除,实战应用没有问题推荐使用,也是最接近底层的遍历方式,我认为。
    Iterator it =list.iterator();
    while(it.hasNext()){
        String temp = (String) it.next();
        if(temp.equals("1") || temp.equals("2")){
            it.remove();
        }
        
    }
    System.out.println(list);
}

}

你可能感兴趣的:(Bug)