我有一个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}}。
如何防止这种情况发生?
答案 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);