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

新手上路,请多包涵

我如何克隆 ArrayList 并在 Java 中克隆它的项目?

例如我有:

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

我希望 clonedList 中的对象与 dogs 列表中的对象不同。

原文由 palig 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 719
2 个回答

您将需要迭代这些项目,并将它们一个接一个地克隆,并在您进行时将克隆放入结果数组中。

 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() 方法。

原文由 Varkhan 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题