Java 循环删除元素

当我们在遍历ArrayList时,需要将满足条件的元素删除,一般的做法如下

ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < list .size(); i++)
{            
    if (list .get(i).equals("hello"))
    {
        list .remove(i);
    }
}

但是这种做法就会出现一个问:这种最普通的循环写法执行后会发现第二个“b”的字符串没有删掉

或者使用for-each

ArrayList<String> list = new ArrayList<String>();

for (String s : list)
{
    if (s.equals("b")) 
    {
        list.remove(s);
    }
}

这种for-each写法会报出异常java.util.ConcurrentModificationException。

其实正确的思路应该是使用iterator,写法如下

ArrayList<String> list = new ArrayList<String>();

Iterator<String> iter = list .iterator(); 

while(iter.hasNext()){  
    //新建一个对象
    String s = iter.next();  
    if(s.equals("hello")){  
        iter.remove();  
    }  
} 

当然,还有一个笨方法,没有iterator方便,就是循环的过程中,将所有满足条件的元素添加到一个tempList中去,然后使用removeAll这个方法一并删除,也是一个不错的方法。

猜你喜欢

转载自blog.csdn.net/wangchengming1/article/details/79834805