本帖最后由 FreeDove 于 2011-07-14 21:10:54 编辑

解决方案 »

  1.   

    for(Long l : list)
    这样的循环里不能更改list也就是不能调用list.remove之类的方法
      

  2.   

    就比如C++里使用iterator,你修改原有的数据结构(删除个元素什么的),这个iterator就不能用了一样的道理
      

  3.   

    最好在list没有变化的情况下操作,如遍历的操作,list有更新时就无法判断是哪个list了
      

  4.   

    for(Long l : list)  得到的只是一个对象 跟list没关系
      

  5.   

    哦,意思相当于是虚拟机里做了处理了,类似list.add之类的对list进行更改的都不行咯
      

  6.   

    “list有更新时就无法判断是哪个list了”这话什么意思,可否详细些。
    java里对list的操作都是通过引址的方式吧,不管怎么更新,都不会生成新的list,都是那个list,怎么无法判断呢?
      

  7.   

    每轮循环这个对象都是从list里出来的,每轮都检查list的size,怎么跟list没关系。
    再说这个和楼主那里的报错没关系吧?
      

  8.   

    for(Long l : list) {等同于Long l;
    for(Iterator iterator = list.iterator(); iterator.hasNext();)
       l = (Long)iterator.next();
    这里出现异常是因为一旦直接调用list.add/remove修改了list,iterator就不能用了
    删除你应该调用iterator.remove()方法!
      

  9.   


     List<Long> list = new ArrayList<Long>();
            list.add(new Long(1));
            list.add(new Long(2));
            list.add(new Long(3));
            list.add(new Long(4));
            list.add(new Long(5));
            Iterator it = list.iterator();
            while(it.hasNext()) {
                System.out.println("run."+it.next());
                
               it.remove();
            }
    你for 的时候 Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象.
    Iterator 会马上抛出 java.util.ConcurrentModificationException 异常。
    你可以使用 Iterator 本身的方法 remove() 来删除对象
      

  10.   

    呵呵,谢谢,这个回答最全面了
    还不想在循环里做数据结构的更改,不好控制,问这个只是好奇for(Long l : list)是怎么跑的而已。留着以后肯定用得上
      

  11.   

    API里面写得非常清楚。for( : )形式的循环实际上是创建了一个迭代器,不能在循环内部调用List的remove方法。而只能调用迭代器的remove
      

  12.   

    for(Long l : list) 这个只是编译器优化处理而已,就是我上面写的代码,完全等同于
    Long l;
    for(Iterator iterator = list.iterator(); iterator.hasNext();) {
        l = (Long)iterator.next();
    }你找个反编译工具就可以看到了
      

  13.   

    明白了,编译成class文件时候换回这写法了哈~~
      

  14.   

    package test;import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    /*
     * from http://hi.csdn.net/HeiBoyYang 
     */
    public class Sample {
    public static void main(String[] args) {
    List listone=new ArrayList();
    listone.add("tom");
    listone.add("two");
    Iterator it=listone.iterator();
    //方案一
    while(it.hasNext()){
    System.out.println(it.next());
    }
    //方案二
    for(int i=0;i<listone.size();i++){
    System.out.println(listone.get(i));
    }
    //方案三
    for(Object a:listone){
    System.out.println(a);
    }

    }}