您的位置:首页 > 编程语言 > Java开发

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

2014-03-11 11:44 645 查看
再次踩bug:遍历删除list(java.util.ConcurrentModificationException)

使用

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);
}
}


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

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

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

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

方法如下

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


以前自已写过一个简单的iterator的简单实现,地址在这
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐