繁体   English   中英

如何在复制到新的arraylist和操作后保持旧arraylist的值

[英]How to maintain the value of old arraylist after copied to a new arraylist and manipulation

我有一个arraylist如下:

ArrayList<List<Double>> myAr = new ArrayList<>();

我将值添加到数组中,如下所示:

myAr.add(Arrays.asList((double)3,(double)4,(double)5,(double)6));
myAr.add(Arrays.asList((double)6, (double)8, (double)1, (double)4));

然后我分配给一个新的arraylist并将myAr复制到temp,如下所示:

ArrayList<List<Double>> temp = new ArrayList<>();
temp = (ArrayList<List<Double>>)myAr.clone();

我对元素进行了一些修改,如下所示:

temp.get(0).set(2, 9.0);

然后我显示temp和myAr的输出。

System.out.println(temp);
System.out.println(myAr);

不幸的是,两者都显示相同的输出。 我希望myAr保持不变。 我能做什么?

谢谢

您需要实现深层复制,即您实际上需要复制内部列表:

ArrayList<List<Double>> temp = new ArrayList<>();
for (List<Double> list : myAr) {
  temp.add(Arrays.asList(list.toArray(new Double[0]));
}

否则tempmyAr的元素指向相同的底层列表。

发生这种情况是因为你是clonig的ArrayList,即myAr包含(不是原始类型)。为了完成这个任务,你必须使用for循环单独复制所有元素。

使用以下代码,它将起作用:

ArrayList<List<Double>> myAr = new ArrayList<>();

    myAr.add(Arrays.asList((double)3,(double)4,(double)5,(double)6));
    myAr.add(Arrays.asList((double)6, (double)8, (double)1, (double)4));

    ArrayList<List<Double>> temp = new ArrayList<>();

    //copy old list to new list (deep copy)
    for (List<Double> list : myAr)
    {
        temp.add(list);
    }

    //output original list  
    for (List<Double> list : myAr)
    {
        System.out.println(list);
    }

    System.out.println();
    System.out.println("Temp array");

    //editing value in new list
    temp.get(0).set(2, 11.0);

    //output new list
    for (List<Double> list : temp)
    {
        System.out.println(list);
    }

.clone()创建一个浅表副本(即它创建一个新集合并复制集合中值的指针,但不复制值)。

如果要实现深层复制,请使用复制构造函数:

temp = new ArrayList<>(myArr);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM