add以后,无法用remove移除

来源:百度知道 编辑:UC知道 时间:2024/05/19 19:38:39
import java.util.*;
public class L114 {
static int i=0;

public String toString()
{
return "L114's son"+" ";
}
public static void main(String []args)
{
List<L114> bj=new LinkedList<L114>();
//L114 []bq=bj.toArray(new L114[10]);
L114 []bq=new L114[10];
for(int i=0;i<10;i++)
{
bq[i]=new L114();
bj.add(bq[i]);
System.out.println(bq[i]);

}

System.out.println(bj);
List<L114> pq=bj.subList(1,5);
L114 p=new L114();

//System.out.println(bj.containsAll(pq));
System.out.println(pq);

//System.out.println(bj.containsAll(pq));
bj.remove(pq);//用这句remove的时候,运行时看结果,remove没有任何效果
//bj.removeAll(pq);用这句removeAll的时候,程序运行到这1句就中断了。
System.out.println(bj);
}

}

····无语
我觉得可能是因为我往容器里塞进去的东西和我所要移除的东西不一样的原因。

也许是因为这样的初始化才导致异常。
for(int i

bj.remove(pq)方法移除的是bj所包含的对象中和pq完全相同的东西,也就是对象的hashCode相同的东西,现在pq是一个list而不是单一的L114对象,bj中肯定不包含list,相当于在bj中找不到pq,所以不能删除
removeAll()方法抛异常是因为pq是bj的子列,pq所指向的对象在bj中也有,在删除bj中包含在pq子列中的对象时pq的值同时发生了变化,因此会抛ConcurrentModificationException错误,意思就是指两个指向同一个对象的变量同时对这个变量进行了修改
想知道详细原因可以查java的api文档,或者直接看源代码