2016-02-29 70 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); 
相关问题