在日常项目开发中常常会使用的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();
}
}
}