public  void sayhello() 
{
       ArrayList<Integer> list=new  ArrayList<Integer>();
       list.add(2);
       list.add(3);
       list.add(2);
       for(int a:list)
       {
        list.remove(2);
       }
         
}
运行报错 求解

解决方案 »

  1.   

    这不是for循环的问题,是ArrayList的问题
    ArrayList是线程不安全的,你边遍历又删除自然报出并发异常(快速失败异常)
    很多人会出这样的错误。楼主对集合的特性要了解透彻
      

  2.   

    百度ListIterator,这个List特有的Iterator,可以一边遍历一边删除或者增加
      

  3.   

    这不是增强for()的问题,你这种写法就是for()循环,
      

  4.   

    haode CSDN官方微信正式上线
      

  5.   

    关于详细的解释可以参考:http://blog.csdn.net/smcwwh/article/details/7036663
    解决办法可以如下:public class Hello {
    public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    Collections.addAll(list, "a,b,c,d,e,f".split(",")); for (String string : list) {
    if (string.equals("d")) {
    list.remove(string);
    break;
    }
    } for (int i = 0; i < list.size(); i++) {
    String string = list.get(i);
    if (string.equals("b")) {
    list.remove(string);
    }
    }
    }
    }
      

  6.   

    for (int a : list) {
        list.remove(2);
    }
    这个写法本身就是有问题的。
    ①、如果想要保持你的操作而不报错请加上这样一个判断
    for (int a : list) {
        if (a == 2) list.remove(2);
    }
    ②、list.remove(2);会将2当数组下标也就是说会删除list的第三个元素,而你的list本身只有3个元素,所以for执行到二次的时候就会抛出IndexOutOfBoundException。要删除元属请使用list.remove(new Integer(2));
    ③、如果要达到预期的效果也就是删除list中所有的2可以使用
    while (list.contains(new Integer(2))) {
        list.remove(new Integer(2));
    }
      

  7.   

    对,这个跟for无关的,是逻辑问题
      

  8.   

    list里面只能放引用数据类型吧
      

  9.   

    public  void sayhello() 
    {
           ArrayList<Integer> list=new  ArrayList<Integer>();
           list.add(2);
           list.add(3);
           list.add(2);
           for(int a=0;a<list.size();a++)
           {
            if(list.get(a)==3)
            list.remove(a);
           }
           for(int a=0;a<list.size();a++)
           {
            System.out.println(list.get(a));
           }
    }
    用普通的for就没问题
      

  10.   

    你的for(int a:list) { list.remove(2);  } 就存在很严重的问题,你要永远记住!对于foreach来说只能是遍历比如查询等等,如果用想要是数组或者集合的元素增加或者减少时,使用foreach就是错误的。另一方面来说如果你想该方法来移除“2”,一定会抛出越界异常,你把所有的“2”都移除后,而for循环还在运行你说她不会抛出异常吗。