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
12 Answers
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.
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()); 3