【问题标题】:ArrayList Deep CopyArrayList 深拷贝
【发布时间】:2015-10-11 18:00:09
【问题描述】:

我有以下代码创建数组列表的浅表副本,但是,我想将其更改为创建深层副本,但我不确定如何。我已经尝试在网上查找,但无法真正找到答案。

我现在的代码是:

public class Array {

public static void main(String[] args) {
    ArrayList<Double> list1 = new ArrayList<>();
    list1.add(1.5);
    list1.add(2.5);
    list1.add(3.5);

    ArrayList<Double> list2 = (ArrayList<Double>)list1.clone();
    ArrayList<Double> list3 = list1;

    list2.add(4.5);
    list3.remove(1.5);
   System.out.println("list1 is " + list1);
   System.out.println("list2 is " + list2);
   System.out.println("list3 is " + list3);
    }

【问题讨论】:

  • 我厌倦了,但我似乎无法让这种方法发挥作用,不确定我做错了什么
  • 为什么要一个不可变类的深拷贝???您的代码 sn-p 应该演示什么?这是按预期工作的,它不会做任何不同的事情,即使你做了那个 ArrayList 的深层副本。
  • 我只是想让它证明一个列表是另一个列表的深层克隆

标签: java arrays arraylist deep-copy


【解决方案1】:

您可以使用 Apache Commons 的 SerializationUtils。
要使用 SerializationUtils,类必须实现 Serializable 接口。 Reference

【讨论】:

    【解决方案2】:

    深拷贝是这样的

    ArrayList<Double> list1 = new ArrayList<>();
        list1.add(1.5);
        list1.add(2.5);
        list1.add(3.5);
    
    ArrayList<Double> list2 = new ArrayList<Double>();
    
    for (Double d : list1){
    list2.add(d);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2015-01-13
      • 2011-09-05
      相关资源
      最近更新 更多