复制包含arraylist的arraylist

时间:2012-11-22 20:45:11

标签: java copy

我有两个类,比如Class Foo,而Class Boo.Foo类包含一个Boo类的arraylist。我需要创建一个Foo类的深层副本,我正在创建Foo的arraylist。我怎样才能做到这一点。

        Class Foo{
        ArrayList<Boo> boovar = new ArrayList<Boo>();
        }

        Class Boo{
        int x;
        void add_x(int y)
        {
            x=y;
        }   
        }

         ArrayList<Foo> foovar = new ArrayList<Foo>();


    ..adding elements to foovar.

现在我想创建一个类型为Foo的ArrayList foovar1,这样它就是foovar中对象的副本。即,如果我修改foovar中的boo对象,比如删除x或添加元素,则在访问foovar1时不应该反映它。

我知道深刻的复制已被打死,但我真的找不到文章告诉我该怎么做。有人可以告诉我如何使用代码吗?

编辑:

我试图在Foo中创建一个复制构造函数,就像上面提到的一条注释一样,但我真的不知道如何通过Foo中的构造函数将Boo arraylist复制到另一个。 更不用说我将如何在arraylist中循环Foo的实例来创建它的副本。任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:1)

首先,您需要在Boo类中创建一个复制构造函数:

Class Boo{
  int x;

  //copy constructor 
  public Boo (Boo sourceBoo){
    x = sourceBoo.x;
  }

}

使用上面的内容,你可以在Foo类中创建一个复制构造函数来复制其中包含的Boos数组:

Class Foo{
  ArrayList<Boo> boovar = new ArrayList<Boo>();

  //copy constructor
  public Foo(Foo sourceFoo){
    for (Boo aBoo:sourceFoo.boovar){
      boovar.add(new Boo(aBoo)); 
    }
  }

}

现在,您可以遍历您的Foo数组并将它们逐个复制到一个新数组中。你可以定义一个方法来做到这一点:

public ArrayList<Foo> deepCopyFooList(ArrayList<Foo> sourceArray){
   ArrayList<Foo> targetList = new ArrayList<Foo>();
   for (Foo aFoo:sourceArray){
     targetList.add(new Foo(aFoo));
   }

   return targetList;
}

所以要复制你的数组:

ArrayList<Foo> foovar = new ArrayList<Foo>();
ArrayList<Foo> foovarCopy = deepCopyFooList(foovar);

答案 1 :(得分:0)

编辑:

List<Boo> newCopy = new ArrayList<Boo>(boovar);
newCopy.addAll(boovar);

..假设boovar的元素是不可变的。如果没有,你应该在Boo类上使用clone()方法。