日期:2014-05-20  浏览次数:20655 次

在循环遍历过程中删除的问题
public static void test1(){
List<Integer> L1 = new ArrayList<Integer>();
for(int i = 0; i < 10; i++)
L1.add(i);
for(int i : L1){
System.out.println(i);
if(i == 8)
L1.remove(i);
}
}

以上问题,当我把设置删除条件为if(i == 8)时,则不会报错,而当设为0-7或者9,都会报错,为什么,感觉应该全部会报错的

------解决方案--------------------
Effective java 第46条for-each无法使用的三种情况,在这三种情况下必需显式的调用迭代器。
1.过滤。即遍历集合并删除。
2.转换。即遍历集合并修改。
3.平行迭代。即平行的遍历多个集合。
------解决方案--------------------
好像是使用迭代器的话就不能用remove了,该成用for(int i=0;i<L1.size();i++)就可以!
------解决方案--------------------
用了增强型for循环是不能删除的,它内部实际上了加了同步
你可以改成普通的for循环,或者有用Iterator接口
------解决方案--------------------
前段时间我也在处理这个问题,我的做法是,把这个Iterator it = list.iterator(),然后循换it数组,list来删除对应的下标。

如果删除当前循环的数组就会爆。。。