看这个:
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");其中任何一个都对,就是不能同时,这是为什么呢?
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");其中任何一个都对,就是不能同时,这是为什么呢?
所以在第二个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){}
}
}
我已测试通过.
异常如下:
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"); 会引发这个异常
因为l2.add()本身就影响了l1.
java的集合类里面有个变量modCound,这个变量记录了list 的操作次数。
这就是所谓list内部数据同步的问题.
所以你如果调用某个list的subList(),iterator这些方法后就不能通过这个list直接操作它了.
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);
}
谢谢各位了^_^