如何更改ItList中的ArrayList元素而不影响原始元素?

时间:2016-02-29 05:06:53

标签: java android

我有一个originalArrayList字符串,让我们说 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,在我的情况下是{{1}}。

如何防止这种情况发生?

3 个答案:

答案 0 :(得分:5)

据我所知,有两种方法可以解决您的问题,

  • 创建新的ArrayList并使用循环添加originalArrayList的每个元素(不推荐,因为耗费内存消耗任务

  • originalArrayList克隆为tempArrayList

在新的ArrayList中添加每个元素看起来像这样

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

克隆ArrayList看起来像我要推荐的

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

答案 1 :(得分:1)

assign语句上发生的是浅拷贝,这意味着两个变量指向相同的内存位置,因此它们都会发生变化。

您可以做的是克隆ArrayList以创建ArrayList的新实例:

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

答案 2 :(得分:1)

ArrayList提供了一个复制传入的任何Collection的构造函数。

ArrayList<String> tempArrayList = new ArrayList<String>(originalArrayList);