Cómo hacer una copia profunda de Java ArrayList

Posible duplicado:
¿Cómo clonar ArrayList y también clonar sus contenidos?

tratando de hacer una copia de una ArrayList. El objeto subyacente es simple y contiene objetos Strings, ints, BigDecimals, Dates y DateTime. ¿Cómo puedo asegurarme de que las modificaciones realizadas en la nueva ArrayList no se vean reflejadas en la lista ArrayList anterior?

Person morts = new Person("whateva"); List oldList = new ArrayList(); oldList.add(morts); oldList.get(0).setName("Mortimer"); List newList = new ArrayList(); newList.addAll(oldList); newList.get(0).setName("Rupert"); System.out.println("oldName : " + oldList.get(0).getName()); System.out.println("newName : " + newList.get(0).getName()); 

Saludos, P

Clonación de los objetos antes de agregarlos. Por ejemplo, en lugar de newList.addAll(oldList);

 for(Person p : oldList) { newList.add(p.clone()); } 

Suponiendo que el clone está anulado correctamente en Person .

 public class Person{ String s; Date d; ... public Person clone(){ Person p = new Person(); ps = this.s.clone(); pd = this.d.clone(); ... return p; } } 

En tu código de ejecución:

 ArrayList clone = new ArrayList(); for(Person p : originalList) clone.add(p.clone());