[英]How to copy object from java ArrayList?
如何从arraylist复制和编辑对象而不更改原始列表? 这是我的测试代码...
import java.util.ArrayList;
import java.util.List;
public class HelloWorld{
public static void main(String []args){
Person p = new Person("Myo", 25);
Person p2 = new Person("Min", 25);
ArrayList<Person> persons = new ArrayList<Person>();
persons.add(p);
persons.add(p2);
System.out.println(persons.get(0).getName());
List<Person> clonePersons = new ArrayList<Person>();
clonePersons.addAll(persons);
final Person copyP = clonePersons.get(0);
/*copyP.setName("Doe");
copyP.setAge(23);*/
Person secondCopy = new Person();
secondCopy = copyP;
secondCopy.setName("Doe");
secondCopy.setAge(23);
//clonePersons.set(0, new Person("Doe",23));
clonePersons.set(0, secondCopy);
System.out.println("copy list " + clonePersons.get(0).getName() + " pos 2 " + clonePersons.get(1).getName());
System.out.println("original list " + persons.get(0).getName());
}
}
结果..
妙妙
复制列表 Doe pos 2 分钟
复制列表 Doe pos 2 分钟
原始列表 Doe
为什么要更改原始列表? 请帮忙!!
Person secondCopy = copyP;
您需要创建一个新的Person
对象,现在您只是将相同的对象分配给另一个变量,因此当您更改值时,原始值也会被修改
在这种情况下,Java 通过引用传递对象,因此无论您将创建多少个list
您都将处理两个第一个Person
实例。 您需要在Person
上使用Clonable
。
就像是
class Person implement Clonable {
...
}
List<Person> clonePersons = new ArrayList<Person>();
for (Person p : persons)
clonePersons.add(p.clone());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.