问题
Possible Duplicate:
How to clone ArrayList and also clone its contents?
trying to make a copy of an ArrayList. The underlying object is simple containing on Strings, ints, BigDecimals, Dates and DateTime object. How can I ensure that the modifications made to new ArrayList are not reflected in the old ArrayList?
Person morts = new Person(\"whateva\");
List<Person> oldList = new ArrayList<Person>();
oldList.add(morts);
oldList.get(0).setName(\"Mortimer\");
List<Person> newList = new ArrayList<Person>();
newList.addAll(oldList);
newList.get(0).setName(\"Rupert\");
System.out.println(\"oldName : \" + oldList.get(0).getName());
System.out.println(\"newName : \" + newList.get(0).getName());
Cheers, P
回答1:
Cloning the objects before adding them. For example, instead of newList.addAll(oldList);
for(Person p : oldList) {
newList.add(p.clone());
}
Assuming clone is correctly overriden inPerson.
回答2:
public class Person{
String s;
Date d;
...
public Person clone(){
Person p = new Person();
p.s = this.s.clone();
p.d = this.d.clone();
...
return p;
}
}
In your executing code:
ArrayList<Person> clone = new ArrayList<Person>();
for(Person p : originalList)
clone.add(p.clone());
来源:https://stackoverflow.com/questions/7042182/how-to-make-a-deep-copy-of-java-arraylist