list刪除元素
阿新 • • 發佈:2019-02-08
當想要刪除list中的元素時想到3種方法,for迴圈、增強for迴圈、迭代器迴圈遍歷,但其實有的操作是不能得到正確結果的。
首先初始化要操作的資料
public static void init(){
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
System.out.println("初始化:"+list.size());
}
for迴圈
for (int i = 0; i < list .size(); i++) {
System.out.println("第"+i+"次刪除");
System.out.println("list長度:"+list.size());
if (i<5) {
list.remove(i);
}
}
然而程式執行結果並不是執行了5次remove(),
第0次刪除
list長度:5
第1次刪除
list長度:4
第2次刪除
list長度:3
增強for迴圈
刪除元素後繼續迴圈會報錯誤資訊java.util.ConcurrentModificationException,因為元素在使用的時候發生了併發的修改,導致異常丟擲。但是刪除完畢馬上使用break跳出, 則不會觸發報錯,跳出迴圈這就意味著後面有匹配的元素也不能刪除了。
for(String string :list){
if (string.equals("b")) {
list.remove(string);
break;
}
}
迭代器刪除
使用迭代器刪除元素就不會遇到上面的問題了,下面的程式碼會把list中所有的“a”全部刪除。
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
if (string .equals("a")) {
iterator.remove();
}
}
結論
前兩種方法在刪除單個指定元素的時候是可以的,當刪除多個元素的時候就會出現問題,迭代器的話是單個多個刪除都沒有問題的,所以在刪除的時候應該使用第三種方法。