我如何克隆 ArrayList
并在 Java 中克隆它的项目?
例如我有:
ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....
我希望 clonedList
中的对象与 dogs 列表中的对象不同。
原文由 palig 发布,翻译遵循 CC BY-SA 4.0 许可协议
我如何克隆 ArrayList
并在 Java 中克隆它的项目?
例如我有:
ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....
我希望 clonedList
中的对象与 dogs 列表中的对象不同。
原文由 palig 发布,翻译遵循 CC BY-SA 4.0 许可协议
我个人会为 Dog 添加一个构造函数:
class Dog
{
public Dog()
{ ... } // Regular constructor
public Dog(Dog dog) {
// Copy all the fields of Dog.
}
}
然后迭代(如 Varkhan 的回答所示):
public static List<Dog> cloneList(List<Dog> dogList) {
List<Dog> clonedList = new ArrayList<Dog>(dogList.size());
for (Dog dog : dogList) {
clonedList.add(new Dog(dog));
}
return clonedList;
}
我发现这样做的好处是您不需要在 Java 中处理损坏的 Cloneable 东西。它还与您复制 Java 集合的方式相匹配。
另一种选择是编写您自己的 ICloneable 接口并使用它。这样你就可以编写一个通用的克隆方法。
原文由 cdmckay 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.2k 阅读
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
您将需要迭代这些项目,并将它们一个接一个地克隆,并在您进行时将克隆放入结果数组中。
为此,显然,您必须让您的
Dog
类来实现Cloneable
接口并覆盖clone()
方法。