簡體   English   中英

如何從java ArrayList復制對象?

[英]How to copy object from 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());
     }
}

結果..

妙妙
復制列表 Doe pos 2 分鍾
復制列表 Doe pos 2 分鍾
原始列表 Doe

為什么要更改原始列表? 請幫忙!!

Person secondCopy = copyP;

您需要創建一個新的Person對象,現在您只是將相同的對象分配給另一個變量,因此當您更改值時,原始值也會被修改

在這種情況下,Java 通過引用傳遞對象,因此無論您將創建多少個list您都將處理兩個第一個Person實例。 您需要在Person上使用Clonable

就像是

class Person implement Clonable {
...
}


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM