• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

java list集合遍历时删除元素

互联网 diligentman 2个月前 (02-28) 21次浏览

转:

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.ConcurrentModificationException

for (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方法,写为我们上边的代码就可以正常运行了.

转:

java list集合遍历时删除元素

–Posted from Rpc

展开阅读全文

© 著作权归作者所有

举报

0


0 收藏

微信
QQ
微博

分享

作者的其它热门文章

Spring + Dubbo + zookeeper (linux) 框架搭建
SpringMvc + Shiro[数据库存权限] 配置 ;[附git.oschina的项目地址]
nginx 同一端口根据不同域名转发到不同端口
Spring SpringMvc 3.0 + MyBatis 整合


程序员灯塔
转载请注明原文链接:java list集合遍历时删除元素
喜欢 (0)