遍歷並刪除集合元素容易出現的問題,list

阿里開發手冊上:

7. 【強制】不要在foreach循環裏進行元素的remove/add操作。remove元素請使用Iterator
方式,如果併發操作,需要對Iterator對象加鎖。
正例:
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (刪除元素的條件) {
iterator.remove();
}
}
反例:
List<String> a = new ArrayList<String>();
list.add("1");
list.add("2");
for (String item : list) {
if ("1".equals(item)) {
list.remove(item);
}
}
說明:以上代碼的執行結果肯定會出乎大家的意料,那麼試一下把“1”換成“2”,會是同樣的
結果嗎?
 List<String> list = new ArrayList<String>();

      list.add("1");
      list.add("2");
      list.add("3");

      for(int i=0;i<list.size();i++){
          String s = list.get(i);
          pl(s);
          if("2".equals(s))list.remove(i);
          //
          // pl(list.size());
      }

//結果
/*
    1
    2
最後的元素沒有遍歷到,達不到遍歷所有元素並按條件刪除
/*

 

反例中會出現錯誤,很多博客都很詳細說明了這點,這裏只是個人備忘下,做點補充
 

 

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