如何克隆ArrayList并克隆其内容?

问题描述 投票:257回答:18

如何克隆ArrayList并在Java中也克隆其项目?

例如,我有:

ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....

而且我希望clonedList中的对象与狗列表中的对象不同。

java collections clone deep-copy
18个回答
191
投票

您将需要遍历所有项目,然后逐个克隆它们,然后将克隆放入结果数组中。


1
投票
讨厌的方法是反射。像这样的东西对我有用。

0
投票
其他张贴者是正确的:您需要迭代列表并复制到新列表中。

0
投票
这里是使用通用模板类型的解决方案:

0
投票
为您的对象覆盖clone()方法

0
投票
使用commons-lang-2.3.jar的Java库克隆列表的简便方法

0
投票
包装import org.apache.commons.lang.SerializationUtils;

0
投票
我刚刚开发了一个可以克隆实体对象和java.util.List对象的库。只需下载https://drive.google.com/open?id=0B69Sui5ah93EUTloSktFUkctN0U中的jar,然后使用静态方法cloneListObject(List list)。此方法不仅克隆列表,还克隆所有实体元素。

0
投票
下面为我工作。.>

在Dog.java中


-1
投票
我认为我发现了一种很简单的方法来制作深拷贝ArrayList。假设您要复制一个String ArrayList arrayA。

190
投票

我个人将为Dog添加一个构造函数:


138
投票

所有标准集合都有副本构造函数。使用它们。


37
投票

Java 8提供了一种新的方法来优雅而紧凑地在元素狗上调用复制构造函数或克隆方法:Streams, lambdas and collectors


27
投票
基本上有三种方法,无需手动进行迭代,

18
投票

我认为当前的绿色答案是错误的


5
投票
我找到了一种方法,您可以使用json对列表进行序列化/反序列化。未序列化时,序列化列表不包含对原始对象的引用。

5
投票
我一直使用此选项:

2
投票
您将需要手动克隆ArrayList(通过对其进行迭代并将每个元素复制到新的ArrayList),因为clone()不会为您完成。原因是ArrayList中包含的对象本身可能未实现Clonable
© www.soinside.com 2019 - 2024. All rights reserved.