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.ArrayListItr.checkForComodification(ArrayList.java:909)atjava.util.ArrayListItr.checkForComodification(ArrayList.java:909) at java.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);
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章