如何在java中创建同一ArrayList的两个副本
我试图创建一份列表副本以备备份,但当我对原始列表进行一些更改时,同样的更改也会反映在副本列表中。 请查找以下代码以供参考如何在java中创建同一ArrayList的两个副本,java,list,arraylist,core,Java,List,Arraylist,Core,我试图创建一份列表副本以备备份,但当我对原始列表进行一些更改时,同样的更改也会反映在副本列表中。 请查找以下代码以供参考 class ListElement{ private String name; private Integer age; ListElement(String name, Integer age){ this.name = name; this.age = age; } public String g
class ListElement{
private String name;
private Integer age;
ListElement(String name, Integer age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
public class ListUnionTest {
public static void main(String[] ars){
ListElement ele = new ListElement("ABC", 25);
List<ListElement> list_1 = new ArrayList<ListElement>();
list_1.add(ele);
System.out.println("Before ADDALL --> " + list_1.get(0).getAge());
List<ListElement> list_2 = new ArrayList<ListElement>();
list_2.addAll(list_1);
System.out.println("AFTER ADDALL --> " + list_2.get(0).getAge());
list_1.get(0).setAge(30);
System.out.println("after change in List_1 orginal list value --> " + list_1.get(0).getAge());
System.out.println("after change List_1 copy list value --> " + list_2.get(0).getAge());
}
}
Actual output:
Before ADDALL --> 25
AFTER ADDALL --> 25
after change in List_1 orginal list value --> 30
after change List_1 copy list value --> 30
Expected output:
Before ADDALL --> 25
AFTER ADDALL --> 25
after change in List_1 orginal list value --> 30
after change List_1 copy list value --> 25
类列表元素{
私有字符串名称;
私人整数年龄;
ListElement(字符串名称,整数期限){
this.name=名称;
这个。年龄=年龄;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共整数getAge(){
回归年龄;
}
公共无效设置(整数期限){
这个。年龄=年龄;
}
}
公共类列表测试{
公共静态void main(字符串[]ars){
ListElement元素=新的ListElement(“ABC”,25);
List_1=新的ArrayList();
列表1.添加(ele);
System.out.println(“在ADDALL-->”之前+list_1.get(0.getAge());
List_2=新的ArrayList();
列表2.addAll(列表1);
System.out.println(“AFTER ADDALL-->”+list_2.get(0.getAge());
列表1.获取(0).设置(30);
System.out.println(“列表_1原始列表值更改后-->”+List_1.get(0.getAge());
System.out.println(“更改后列表\u 1副本列表值-->”+列表\u 2.get(0.getAge());
}
}
实际产量:
添加所有-->25之前
加总-->25后
列表更改后\u 1原始列表值-->30
更改列表后\u 1复制列表值-->30
预期产出:
添加所有-->25之前
加总-->25后
列表更改后\u 1原始列表值-->30
更改列表后\u 1复制列表值-->25
因此,我丢失了旧数据。听说过“对象引用”这个词吗?听说过“对象引用”这个词吗?