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

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