Android 開發中 ArrayList 的 remove 刪除無效?

在日常項目開發中常常會使用的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();
            }
        }
}

參考文章:https://www.cnblogs.com/huangjinyong/p/9455163.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章