向容器中添加元素出现的问题

wzz24 2004-08-02 05:14:21
看这个:
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");其中任何一个都对,就是不能同时,这是为什么呢?

...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzz24 2005-04-27
  • 打赏
  • 举报
回复
调用了l1.subList()后,可以增加, 试了,
谢谢各位了^_^
shan1119 2005-04-25
  • 打赏
  • 举报
回复
不是不可以,使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);
}
MARS.nEIL 2005-04-25
  • 打赏
  • 举报
回复
学习..
ngqzmjmj 2005-04-25
  • 打赏
  • 举报
回复
l2是l1的子列表,调用了l1.subList()后,就不能再对l1做添加删除操作,
因为l2.add()本身就影响了l1.
java的集合类里面有个变量modCound,这个变量记录了list 的操作次数。
这就是所谓list内部数据同步的问题.
所以你如果调用某个list的subList(),iterator这些方法后就不能通过这个list直接操作它了.
wzz24 2005-04-25
  • 打赏
  • 举报
回复
加上异常处理我明白了, 但是"如果没有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"); 会引发这个异常
anihc_001 2004-08-02
  • 打赏
  • 举报
回复
因为你的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){}
}
}
我已测试通过.

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧