ArrayList()的深层副本

时间:2015-02-27 16:20:46

标签: java arraylist deep-copy shallow-copy

我有一个ArrayList,我需要一个值的副本而不是引用。

到目前为止我尝试过:

ArrayList<AudioInputStream> copy = new ArrayList<AudioInputStream>(original);
Collections.copy(copy, original);

我猜这些副本称为浅拷贝,因为AudioInputStreamObject。我读到一个简单的深层复制方法是使用构造函数,但我无法在我的案例中弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:0)

当我们谈论使用构造函数的深层复制时,我们必须创建这样的东西:

public class Foo {
  public Foo(Foo aFoo) {
     //your deep copy here
  }
}

然后,很容易在列表上循环并创建新对象。

List<Foo> newList = /* whatever */;
for(Foo foo : fooLists ) {
  newList.add(new Foo(foo));
}

然而,AudioInputStream不允许这样做,此外,克隆InputStream的事实非常奇怪。
你能从同一个来源创建另一个InputStream吗?