看这个:
public class Wzz{
  public static void main(String argv[]){
    Collection l1=new ArrayList();
    for(int i=0;i<10;i++)
      l1.add(""+i);
    Collection l2=((List)l1).subList(3,5);
    l1.add("xx");
    l2.add("xxxx");  
  }
}
去掉上面l1.add("xx");和l2.add("sd");其中任何一个都对,就是不能同时,这是为什么呢?

解决方案 »

  1.   

    因为你的l2是连在l1上的,在添加元素是存在异常(如果没有l1,那你的l2该怎么和l1连上啊)
    所以在第二个add上要加异常处理.代码如下:
    import java.util.*;public class Wzz{
      public static void main(String argv[]){
        Collection l1=new ArrayList();
        for(int i=0;i<10;i++)
          l1.add(""+i);
        Collection l2=((List)l1).subList(3,5);
        l1.add("xx");
      try{  
       l2.add("xxxx"); 
       }catch(Exception e){} 
      }
    }
    我已测试通过.
      

  2.   

    加上异常处理我明白了, 但是"如果没有l1,那你的l2该怎么和l1连上啊"不明白
    异常如下:
    Exception in thread "main" java.util.ConcurrentModificationException
            at java.util.SubList.checkForComodification(AbstractList.java:850)
            at java.util.SubList.size(AbstractList.java:723)
            at java.util.AbstractList.add(AbstractList.java:84)
            at Wzz.main(Wzz.java:11)
    直译过来好象是"并发修改异常"
    还是不明白为什么同时有l1.add("xx");l2.add("xxxx");  会引发这个异常
      

  3.   

    l2是l1的子列表,调用了l1.subList()后,就不能再对l1做添加删除操作,
    因为l2.add()本身就影响了l1.
    java的集合类里面有个变量modCound,这个变量记录了list 的操作次数。
    这就是所谓list内部数据同步的问题.
    所以你如果调用某个list的subList(),iterator这些方法后就不能通过这个list直接操作它了.
      

  4.   

    不是不可以,使l1改变后,l2得重新取值:
    public static void demo(){
        Collection l1=new ArrayList();
        for(int i=0;i<10;i++)
          l1.add(""+i);
        System.out.println(l1);
        Collection l2=((List)l1).subList(3,5);
        l1.add("xx");
        l2=((List)l1).subList(3,5);
        l2.add("xxxx");  
        System.out.println(l2);
      }
      

  5.   

    调用了l1.subList()后,可以增加, 试了,
    谢谢各位了^_^