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

2022-08-31 05:09:08

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

例如,我有:

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

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


答案 1

您需要循环访问这些项目,并逐个克隆它们,并随时将克隆放入结果数组中。

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;
}

显然,要做到这一点,你必须让你的类实现接口并重写该方法。DogCloneableclone()


答案 2

就我个人而言,我会为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接口并使用它。这样,您就可以编写用于克隆的通用方法。