在list使用remove移除元素的問題

2021-09-26 08:04:24 字數 1196 閱讀 4036

當我們在對集合中的元素進行操作時,通過foreach對集合進行遍歷並且使用remove()方法時,如以下**:

public class test 

}for (string a:list) }

}

此時程式會報錯:

這是因為迭代器內部維護了索引位置相關的資料,它要求在迭代過程中,容器不能發生結構性變化,所謂結構性變化就是 新增、插入 和 刪除 元素,而修改元素內容不算結構性變化。要避免該異常,就需要使用迭代器的 remove 方法。

在檢驗時又發現當remove倒數第二個元素時又不會報錯,這是為什麼呢?

因為foreach的底層就是迭代器,迭代器迴圈會依次調hasnext()和iterator.next()。

remove倒數第二個後,arraylist集合私有屬性size=size -1。

接著迭代下一次迴圈時先判斷 hasnext,

public boolean hasnext()
只有此時游標cursor == size 。hasnext返回false 迴圈結束。會丟失最後乙個元素的遍歷。

當我們使用普通的遍歷寫法時:

public class test 

} for (string a:list

) }}

會發現只會remove掉第乙個"a",而第二個還在,這是因為刪除時實際上是元素的移動。寫法二中,從前往後遍歷,index 遍歷到第乙個 「a」,刪除時即把從第二個 「a」 及之後的元素拷貝到當前指向的位置,也就是第二個 「a」 移動到了第乙個 「a」 的位置上,從而「刪除」了第乙個 「a」。接著,index 就跳過了當前位置,所以,第二個 「a」 就被跳過了,也就不會被刪除了。

解決這個問題的辦法將集合倒序遍歷即可。

for (int i = list.size() - 1; i >= 0; i--) 

}

若要安全移除乙個元素可以使用以下方法:

iteratoriterator = list.iterator();

while (iterator.hasnext())

}

List物件remove方法的使用

一 源程式 string str1 newstring 1 string str2 newstring 2 string str3 newstring 3 string str4 newstring 4 string str5 newstring 5 list list new arraylist ...

JAVA 使用List中的remove方法遇到的坑

一 問題描述 有個需求是從list過濾掉金額小於0.01的資料,看起來很簡單,我卻搞了半天,沒次資料都沒刪除乾淨,都會有四五條沒刪除。二 解決方法 測試了半天,發現for迴圈寫錯了,剛開始是這樣寫的 for int i 0 i psychologistresponselist.size i debu...

List集合中remove方法的使用

以arraylist為例 泛型為引用資料型別 arraylistlist new arraylist list.add tom list.add jim list.remove jim 呼叫刪除方法 system.out.println list.size 刪除的時候呼叫arraylist中的rem...