简体   繁体   中英

How to copy object from java ArrayList?

How to copy and edit object from arraylist without changing in original list? This is my test coding...

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());
     }
}

result..

MyoMyo
copy list Doe pos 2 Min
copy list Doe pos 2 Min
original list Doe

Why changes in original list? Please Help!!

Person secondCopy = copyP;

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

In this case Java is passing the objects by reference, so whatever the number of list you'll create you'll working on you two first Person instance. You need you use the Clonable on the Person .

Something like

class Person implement Clonable {
...
}


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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM