再次踩bug:遍历删除list(java.util.ConcurrentModificationException)
再次踩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的简单实现,地址在这