我的源代码在此,可为什么运行总是出错,
import java.util.*;class book{}public class t22{
public static void main(String[] args){
book[] nclass=new book[10];
for(int i=0;i<10;i++){
nclass[i]=new book();
}
Collection nlist=new ArrayList();
for(int i=0;i<nclass.length;i++)
nlist.add(nclass[i]);
System.out.println(nlist);
Collection nlist2=new ArrayList();
nlist2=((List)nlist).subList(2,6);
System.out.println(nlist2);
nlist.addAll(nlist2);
System.out.println(nlist);
nlist.removeAll(nlist2);//???在这里总是出错,
System.out.println(nlist);
}
}麻烦各位高手解决一下!
import java.util.*;class book{}public class t22{
public static void main(String[] args){
book[] nclass=new book[10];
for(int i=0;i<10;i++){
nclass[i]=new book();
}
Collection nlist=new ArrayList();
for(int i=0;i<nclass.length;i++)
nlist.add(nclass[i]);
System.out.println(nlist);
Collection nlist2=new ArrayList();
nlist2=((List)nlist).subList(2,6);
System.out.println(nlist2);
nlist.addAll(nlist2);
System.out.println(nlist);
nlist.removeAll(nlist2);//???在这里总是出错,
System.out.println(nlist);
}
}麻烦各位高手解决一下!
还是没有预期的效果,我想从集合nlist中删除nlist2集合中的全部对象。
关键问题是在这一句,好像是涉及到迭代操作的同步问题,具体原因我也没太整明白.似乎是说这句已经对nlist进行操作,就不能再对nlist操作了,否则会冲突.
改成下面的语句就正常了:
for (int i = 2; i < 6; i++)
nlist2.add(nclass[i]);
所以如果你要同时返回这两个List(实现上是一个)就会出现并发错误!
问题只是用另外一种方法解决:
1。这里的subList其实只是返回一个视图(如旗鲁特说的 )。故出如里修改同同则会出现:java.util.ConcurrentModificationException
2。于是只有用(冷血动物说的 )另外做一个List,其中的对象是一样的,但却属于不同的空间,removeAll可以实现。
3。(我以我血荐轩辕) 的方法我试了,我就是怎么都clone 不了。总是有异常。