2016-02-29 82 views
6

我有一個String ArrayList,讓我們說originalArrayList一些值如何更改ArrayList中的元素而不影響原始副本?

final ArrayList<String> originalArrayList = new ArrayList<>(); 
            originalArrayList.add("value1"); 
            originalArrayList.add("value2"); 
            originalArrayList.add("value3"); 
            originalArrayList.add("value4"); 
            originalArrayList.add("value5"); 

我內部類中複製此originalArrayList並刪除了一些元素

button.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                ArrayList<String> tempArrayList = originalArrayList; 
                                
                tempArrayList.remove(0); //Remove an element 
               
            } 
        }); 

但這影響原ArrayList這是originalArrayList在我的情況。

我該如何防止這種情況發生?

+0

克隆它的https ://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#clone() –

回答

4

據我所知只是有兩種方法來解決你的問題,

  • 創建新ArrayList並使用循環加originalArrayList每個元素(不推薦,因爲unncessesory消耗內存的任務的)

  • originalArrayList克隆到tempArrayList

添加新的ArrayList中的每個元素看起來像這樣

ArrayList<String> tempArrayList = new ArrayList<>(); 
    for (String temp : originalArrayList) { 
      tempArrayList.add(temp); 
     } 

克隆的ArrayList看起來是這樣的,我會推薦

ArrayList<String> tempArrayList = (ArrayList<String>) originalArrayList.clone(); 
+0

謝謝我申請第二個... – user5995765

1

發生了什麼事在分配語句是淺拷貝,這意味着兩個變量指向相同的m埃默裏的位置,因此他們都得到了改變。

你可以做的是克隆ArrayList創建ArrayList的新實例:

ArrayList<String> tempArrayList = (ArrayList<String>) originalArrayList .clone();

+0

謝謝你的回答[R ... – user5995765

1

ArrayList提供了拷貝任何Collection傳入構造

ArrayList<String> tempArrayList = new ArrayList<String>(originalArrayList); 
相關問題