我有两个类,例如 Class Foo 和 Class Boo.Foo 类包含 Boo 类的数组列表。我需要创建 Foo 类的深拷贝,并且我正在创建 Foo 本身的数组列表。我怎样才能做到这一点。
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 时,它不应该反射(reflect)出来。
我知道深度复制已经被打死了,但我真的找不到文章告诉我如何做到这一点。有人可以告诉我如何使用代码吗?
编辑:
我试图在 Foo 中创建一个复制构造函数,就像提到的评论之一,但我真的不知道如何通过 Foo 中的构造函数将 Boo 数组列表复制到另一个。 更不用说我将如何在数组列表中循环 Foo 的实例来创建它的副本。任何帮助将不胜感激!
最佳答案
首先,您需要在 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);
关于java - 复制包含数组列表的数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13519746/