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,都会报错,为什么,感觉应该全部会报错的

解决方案 »

  1.   

    用了for(int i : L1) 就不能用L1.remove(i)来删除了!
      

  2.   

    这样做是不可以,会引发并发修改异常,这是为了因为for的增强功能的底层是给予集合的Iterator遍历器的。你假如想要删除集合里元素,可以使用遍历器中的remove()方法。如上面的:for(Interator<Integer> it = L1.iterator();it.hasNext();)
    {
        Integer temp = it.next();
        if(temp == 8)
          {
              it.remove();
          }
        System.out.println(temp);}
      

  3.   

    for(int i : L1)的问题,改为for(int i = 0; i < 10; i++)
      

  4.   

    Effective java 第46条for-each无法使用的三种情况,在这三种情况下必需显式的调用迭代器。
    1.过滤。即遍历集合并删除。
    2.转换。即遍历集合并修改。
    3.平行迭代。即平行的遍历多个集合。
      

  5.   

    关于list删除并不是remove(i)。而应该是remove()就可以了啊
      

  6.   

    好像是使用迭代器的话就不能用remove了,该成用for(int i=0;i<L1.size();i++)就可以!
      

  7.   

    用了增强型for循环是不能删除的,它内部实际上了加了同步
    你可以改成普通的for循环,或者有用Iterator接口
      

  8.   

    你出的错绝对是下标越界了,删除最后一个不错是你没有在进入这个for循环,其实你这样写本身是有问题的,也是一个应该注意的问题,在删除list里面的值时,i就应该减一,这样才会得带你想要的, 
    public static void test1(){
    List<Integer> L1 = new ArrayList<Integer>();
    for(int i = 0; i < 10; i++)
    L1.add(i);
    for(int i=0;i<L1.size();i++){
    System.out.println(i);
    if(i == 8){
    L1.remove(i);//这里的i不是指向值,是下标
    i = i -1 ;
    }

    }
      

  9.   

    建立多一个List进行remove,一个做remove一个做遍历,这样清晰一点,代价中是多了一个List对象
      

  10.   

    删除时一定记得每删除一个ITEM,循环变量减一。
     
    for(int i = 0; i< list.size(); i++){
        list.remove(i);
        i--;
    }
      

  11.   

    前段时间我也在处理这个问题,我的做法是,把这个Iterator it = list.iterator(),然后循换it数组,list来删除对应的下标。如果删除当前循环的数组就会爆
      

  12.   


    int x=0;
    for (int i=0;i<L1.size();i++) {
    //  System.out.println(i);
    if (i == 6) {
    x=i;
    // L1.remove();
    }
    }
    L1.remove(x);