在日常項目開發中常常會使用的ArrayList,用來添加刪除數據時,可能會遇到小坑,
一、遇見問題
遇到的問題如題目,Android 開發中 ArrayList 的 remove 刪除無效?
有時我們會在for循環中去刪除list中的元素,但是結果發現會出現刪除失敗的問題。
二、常用錯誤刪除方式
錯誤寫法1
public static void remove(ArrayList<String> list)
{
for(inti=0;i<list.size();i++)
{
Strings=list.get(i);
if(s.equals("b"))
{
list.remove(s);
}
}
}
錯誤的原因:這種最普通的循環寫法執行後會發現第二個“b”的字符串沒有刪掉。
實質原因:因爲數組倒序遍歷時即使發生元素刪除也不影響後序元素遍歷。
錯誤寫法2
public static void remove(ArrayList<String> list)
{
for(Strings:list)
{
if(s.equals("b"))
{
list.remove(s);
}
}
}
錯誤的原因:這種for-each寫法會報出著名的併發修改異常:java.util.ConcurrentModificationException。
三、解決方案
public static void remove(ArrayList<String> list)
{
Iterator<String> it = list.iterator();
while (it.hasNext())
{
String s = it.next();
if (s.equals("b"))
{
it.remove();
}
}
}