首页 > 其他 > 详细

再次踩bug:遍历删除list(java.util.ConcurrentModificationException)

时间:2014-03-11 21:29:57      阅读:416      评论:0      收藏:0      [点我收藏+]

再次踩bug:遍历删除list(java.util.ConcurrentModificationException)

使用

bubuko.com,布布扣
List<Long> list = new ArrayList<Long>();
for(Long l : list){
    if(l == 5){
        list.remove(l);
    }
}    
for(int i=0; i<list.size(); i++){
    if(l == 5){
       list.remove(l);
    }    
}
bubuko.com,布布扣

上面两种遍历方法都会出错,

第一种循环,增加for循环,当有再次删除时,会出现java.util.ConcurrentModificationException

第二种循环,一边删除size会变小,list的位置也会改变,就算不出错,也会删除错位置(比如你循环到第2个元素的时候你把它删了, 接下来你去访问第3个元素,实际上访问到的是原先的第4个元素。

后来查询后得知,要使用iterator删除list

方法如下

bubuko.com,布布扣
List<Long> list = new ArrayList<Long>();
Iterator<Long> it = list.iterator();
while(it.hasNext){
    if(it.next() == 5){
        it.remove();//注意此处不能用list.remove(it.next());
    }
}
bubuko.com,布布扣

 以前自已写过一个简单的iterator的简单实现,地址在这

再次踩bug:遍历删除list(java.util.ConcurrentModificationException),布布扣,bubuko.com

再次踩bug:遍历删除list(java.util.ConcurrentModificationException)

原文:http://www.cnblogs.com/baron89/p/3593550.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!