java - 复制包含数组列表的数组列表

标签 java copy

我有两个类,例如 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/

相关文章:

java - 如何避免与 file.getParentFile() 进行 null 比较?

java - 如何在 Java 中比较字符串?

java - Spring 问题 : Error creating beans and Injection of autowired dependencies failed

c++ - copy() 不能用于初始化容器吗?

.net - 智能文件复制算法(与OS无关)

c# - 在每个大小为 150 MB 的多个文本文件中搜索字符串 C#

java - 如何在 Java 中将一段日期逐日解析为 String[ ] ?

java - 如何根据主题动态应用预定的kafka消费者?

formatting - 从gedit复制到开放办公室时如何保持格式?

将结构的内容复制到另一个