簡體   English   中英

Java數組列表和對象傳遞

[英]Java Array List and object passing

我的代碼中有一個字符串列表。 我正在將該字符串列表傳遞給函數並對其進行修改。(我正在從列表中添加/刪除一些元素)。但是我不希望這些更改反映在調用者函數中。 所做的更改應僅反映在被調用方函數中。 但是因為對象是通過引用傳遞的,所以我認為更改已反映在兩個函數中。 我如何避免這種情況。 請幫忙

在方法內部,您可以顯式創建列表的副本:

private void method(ArrayList<String> list) {
    ArrayList<String> copy = new ArrayList<String>(list);
    // Rest of the method
}

您必須先復制該對象,然后再將其傳遞給函數。

在sub方法中使用原始數組列表的新ArrayList。

您可以使用Clone方法。

caller(ArrayList<String> a)
{
    callee((List<String>)a.clone());
}

callee(List<String> aCloned)
{

}

通常不建議使用clone方法。 看到這個clone():ArrayList.clone()我認為是淺拷貝

但是你可以嘗試這種方法

public void doOperation(List<String> list){
    List<String> duplicateList = new ArrayList(list);
    // add, or delete stuff on duplicateList
}

在這里,您使用ArrayList的構造函數為您提供傳入的列表的新副本。

您必須使用循環從舊列表手動創建新列表,並且需要傳遞給該方法。

   List<String> list=new ArrayList<>();
    list.add("first");
    list.add("last");
    List<String>list2 =new ArrayList<String>();
    for(String value:list)
    {
    list2.add(new String(value));
    }
    System.out.println("list2-->"+list2);

因為new ArrayList<String>(list); 給list的新引用,但是對象仍然具有相同的引用。

編輯:

public class ArrayCopy {


    public static void main(String[] args) {

        ArrayCopy arrayCopy=new ArrayCopy();
        arrayCopy.copyData();

    }
    public void copyData()
    {
        List<Test> oldList=new ArrayList<Test>();
        oldList.add(new Test("1",10));
        oldList.add(new Test("2",45));
        List<Test> newList =new ArrayList<Test>(oldList);
        System.out.println("newList-->"+newList);

        /**
         * New Copy of Data
         */
        List<Test> newList1 =new ArrayList<Test>();
        for(Test test:newList)
        {
            newList1.add(copyProperty(test));
        }
        System.out.println("newList-->"+newList1);
    }
    private Test copyProperty(Test test)
    {
        Test newTest=new Test(test.getId(), test.getNumber());
        return newTest;
    }
    class Test{
        String id;
        int number;
        public Test(String id,int number) {
            this.id=id;
            this.number=number;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public int getNumber() {
            return number;
        }
        public void setNumber(int number) {
            this.number = number;
        }
    }
}

暫無
暫無

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

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