for循環裏面不要進行remove操作,for循環裏remove元素後,list的下標會減小,導致遍歷不完全
阿新 • • 發佈:2018-01-28
body 代碼 2.0 class equals tostring arraylist 執行 align
【強制】不要在 foreach 循環裏進行元素的 remove/add 操作。remove 元素請使用 Iterator
方式,如果並發操作,需要對 Iterator 對象加鎖。
正例:
Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if (刪除元素的條件) { iterator.remove(); } }
反例:
public static void main(String args[]){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("1"); for (String item : list) { if ("1".equals(item)) { list.remove(item); } } System.out.println(list.toString()); }
//output: [1]
for循環裏remove元素後,list的下標會減小,導致遍歷不完全。
說明:以上代碼的執行結果肯定會出乎大家的意料,那麽試一下把“1”換成“2”,會是同樣的 結果嗎?
for循環裏面不要進行remove操作,for循環裏remove元素後,list的下標會減小,導致遍歷不完全