如何克隆ArrayList并克隆其内容?
2022-08-31 05:09:08
如何在Java中克隆并克隆其项目?ArrayList
例如,我有:
ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....
而且我希望中的对象与狗列表中的对象不同。clonedList
如何在Java中克隆并克隆其项目?ArrayList
例如,我有:
ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....
而且我希望中的对象与狗列表中的对象不同。clonedList
您需要循环访问这些项目,并逐个克隆它们,并随时将克隆放入结果数组中。
public static List<Dog> cloneList(List<Dog> list) {
List<Dog> clone = new ArrayList<Dog>(list.size());
for (Dog item : list) clone.add(item.clone());
return clone;
}
显然,要做到这一点,你必须让你的类实现接口并重写该方法。Dog
Cloneable
clone()
就我个人而言,我会为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中搞砸破碎的可克隆的东西。它还与您复制 Java 集合的方式相匹配。
另一种选择可能是编写自己的ICLable接口并使用它。这样,您就可以编写用于克隆的通用方法。