Ответ 1
Клонирование объектов перед их добавлением. Например, вместо newList.addAll(oldList);
for(Person p : oldList) {
newList.add(p.clone());
}
Предполагая, что clone
правильно переопределяется в Person
.
Возможный дубликат:
Как клонировать ArrayList, а также клонировать его содержимое?
пытается сделать копию ArrayList. Основной объект прост, содержащий объекты Strings, ints, 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());
Cheers, Р
Клонирование объектов перед их добавлением. Например, вместо newList.addAll(oldList);
for(Person p : oldList) {
newList.add(p.clone());
}
Предполагая, что clone
правильно переопределяется в Person
.
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;
}
}
В вашем исполняемом коде:
ArrayList<Person> clone = new ArrayList<Person>();
for(Person p : originalList)
clone.add(p.clone());