如何从java ArrayList复制对象?

时间:2016-10-11 09:28:45

标签: java arraylist

如何在不更改原始列表的情况下从arraylist复制和编辑对象? 这是我的测试编码...

import java.util.ArrayList;
import java.util.List;
public class HelloWorld{
     public static void main(String []args){
        Person p = new Person("Myo", 25);
        Person p2 = new Person("Min", 25);
        ArrayList<Person> persons = new ArrayList<Person>(); 
         persons.add(p);
         persons.add(p2);
        System.out.println(persons.get(0).getName());

        List<Person> clonePersons = new ArrayList<Person>();
        clonePersons.addAll(persons);
        final Person copyP = clonePersons.get(0);
        /*copyP.setName("Doe");
        copyP.setAge(23);*/

        Person secondCopy = new Person();
        secondCopy = copyP;
        secondCopy.setName("Doe");
        secondCopy.setAge(23);
        //clonePersons.set(0, new Person("Doe",23));
        clonePersons.set(0, secondCopy);

        System.out.println("copy list " + clonePersons.get(0).getName() + " pos 2 " + clonePersons.get(1).getName());

        System.out.println("original list " + persons.get(0).getName());
     }
}

结果..

  

MyoMyo
  复制清单Doe pos 2 Min
  复制清单Doe pos 2 Min
  原始名单Doe

为什么要更改原始列表? 请帮助!!

2 个答案:

答案 0 :(得分:2)

Person secondCopy = copyP;

您需要创建一个新的Person对象,此时您只需将同一个对象分配给另一个变量,因此当您更改值时,原始内容也会被修改

答案 1 :(得分:0)

在这种情况下,Java通过引用传递对象,因此,无论你创建list的数量,都会为你做两个Person实例。 您需要使用Clonable上的Person

这样的东西
class Person implement Clonable {
...
}


List<Person> clonePersons = new ArrayList<Person>();
for (Person p : persons)
    clonePersons.add(p.clone());