1. 程式人生 > >list刪除元素

list刪除元素

當想要刪除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長度:51次刪除
list長度:42次刪除
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(); } }

結論

前兩種方法在刪除單個指定元素的時候是可以的,當刪除多個元素的時候就會出現問題,迭代器的話是單個多個刪除都沒有問題的,所以在刪除的時候應該使用第三種方法。