如何使Java ArrayList的深层副本

可能重复:
如何克隆ArrayList并克隆其内容?

试图制作一个ArrayList的副本。 底层对象很简单,包含string,整数,BigDecimals,Dates和DateTime对象。 我如何确保对新的ArrayList进行的修改不会反映在旧的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()); 

干杯,P

在添加对象之前克隆对象。 例如,而不是newList.addAll(oldList);

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

假设clonePerson被正确覆盖。

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

在执行代码中:

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