当我们在遍历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这个方法一并删除,也是一个不错的方法。