![](/img/trans.png)
[英]Overwrite to old value in arraylist after added the values to other 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]));
}
否则temp
和myAr
的元素指向相同的底层列表。
发生这种情况是因为你是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.