日期:2014-05-20  浏览次数:20642 次

关于java的ArrayList问题
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Elem> aviLabel = new ArrayList<Elem>();
    Elem e = new Elem();
    e.setLabelName("ddd");
        
    Elem e1 = new Elem();
        e1.setLabelName("e222");
        
        Elem e2 = new Elem();
        e2.setLabelName("e");
       
        e.getChildren().add(e2);
        e.getChildren().add(e1);
        
        aviLabel.add(e);
        
        e.getChildren().remove(0);
        e.toString();
}
Elem的定义
public class Elem {
    
private String labelName ;
    List<Elem> children = new ArrayList<Elem>();
public Elem() {
// TODO Auto-generated constructor stub
}
。。。。。
}
在main执行倒数第二句e.getChildren().remove(0);时,发现aviLabel列表中的e的第一个孩子也被删除了,我想在对e操作时,不改变aviLabel中已经存储e的值,这个该怎么弄。。。

------解决方案--------------------
引用:
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Elem> aviLabel = new ArrayList<Elem>();
    Elem e = new Elem();
    e.setLabelName("ddd");
        
……

=========================
主要看你要怎么弄,你把一个A对象包含在另一个B对象中,删除A对象,那B对象去哪里引用呀?
难道云引用呀?
A对象 A { 0, 1, 2, 3}
B对象 B -> A (B引用A的数据)
A删除0,则A= {1, 2, 3}
你觉得B中的0还会存在吗?
------解决方案--------------------
楼主,你这问题有点奇葩!首先e.getChildren().remove(0);删除的就是aviLabel列表中的e的第一个孩子,其次 e1 ,e2对象你都存放到了 e.getChildren()这个集合;然后你又通过e.getChildren().remove(0);去删除集e.getChildren()合中的第一个元素。你对e操作不改变aviLabel中已经存储e的值?这个。。。。真心有点不明白。以上代码的数据结构是:aviLabel 集合里面有一个e对象,而e对象下面有两个 children 集合(存放,e1,e2对象)和一个labelName("ddd")。执行e.getChildren().remove(0);后删掉了e2对象。希望对你有用!