java list 范围删除_java list集合遍历时删除元素

转:

大家可能都遇到过,在vector或arraylist的迭代遍历过程中同时进行修改,会抛出异常java.util.ConcurrentModificationException异常

那么怎样才可以在遍历过程中删除集合中不想要元素,且不抛出异常呢.

若有如下一个集合:List

list = new ArrayList<>();

list.add("1");

list.add("2");

list.add("3");

list.add("4");

list.add("5");

list.add("6");

我们现在删除其中"4"这个元素,若直接遍历删除:

报错:java.util.ConcurrentModificationExceptionfor (String str : list) {

if ("4".equals(str)) {

list.remove(str);

}

}

我们可以通过迭代器来进行这一操作,就可以不抛出异常成功删除:Iterator

iterator = list.iterator();

while (iterator.hasNext()) {

String s = iterator.next();

if ("4".equals(s)) {

iterator.remove();//使用迭代器的删除方法删除

}

}

iterator.remove()这个迭代器的删除方法实际上调用的就是list.remove()方法,但是它多了一个操作:expectedModCount = modCount;

expectedModCount:表示对ArrayList修改次数的期望值,它的初始值为modCount。

modCount是AbstractList类中的一个成员变量,

protected transient int modCount = 0`;`

该值表示对List的修改次数,查看ArrayList的add()和remove()方法就可以发现,每次调用add()方法或者remove()方法就会对modCount进行加1操作

在迭代器中如果要删除元素的话,需要调用Itr类的remove方法,写为我们上边的代码就可以正常运行了.

转:

--Posted from Rpc

你可能感兴趣的:(java,list,范围删除)