我想知道是否有可用的方法来深度复制集合而不是使用Iterator来使它循环?由于我的方法采用了Collection<Something> something
之类的参数,因此无法对其进行转换。谢谢。
答案 0 :(得分:1)
出于简单的原因,Java中的内置方法不允许为集合创建深层副本:深层副本的定义取决于类。
没有实用的方法可以猜测它,并且依靠Cloneable
(不是推荐的接口)不是一个好主意。
因此,您必须自己完成此任务。
您可以通过引入一个接口来定义通用方法,该接口定义了每个要深度复制实现的类的复制方法。
例如:
public interface Copyable<T> {
T copy();
}
并实现它,例如:
public class Foo implements Copyable<Foo> {
public Foo copy(){
Foo foo = new Foo();
// deep copy values in foo
return foo;
}
}
您可以在static
中引入Copyable
方法来执行深层收集副本:
public static <T extends Copyable<T>> List<T> deepCopyToList(Collection<T> collection) {
return collection.stream()
.map(Copyable::copy)
.collect(Collectors.toList());
}
并以这种方式使用它:
List<Foo> foos = new ...;
List<Foo> fooCopies = Copyable.deepCopyToList(foos);
在Foo
实现Copyable
的地方。
答案 1 :(得分:0)
您可以使用addAll创建原始集合的副本。