我有许多函数将全局ArrayList作为参数,其中一些不对此列表进行任何更改,而其他函数需要在工作时删除此数组的某些元素,因此我在这些函数中创建了一个本地tempArrays.
static ArrayList array1 = new ArrayList();
public fn1(ArrayList array1)
{
ArrayList tempArray1 = new ArrayList();
tempArray1 = array1;
tempArray1.remove(elemnt);
}
Run Code Online (Sandbox Code Playgroud)
问题是删除的元素也从原始arrayList中删除array1,我不知道为什么?.
谢谢..
排队 :
tempArray1 = array1;
Run Code Online (Sandbox Code Playgroud)
你可以将这个tempArray1变量引用的同一个对象ArrayList,其array1被引用.因此两者都引用了相同的对象ArrayList.ArrayList使用任何变量在对象中进行的任何更改都将由两个变量反映出来.所以当您使用以下方法删除元素时:
tempArray1.remove(elemnt);
Run Code Online (Sandbox Code Playgroud)
array1 也反映了元素的去除.
你应该使用:
ArrayList tempArray1 = new ArrayList(array1);
Run Code Online (Sandbox Code Playgroud)
如官方文档中所述ArrayList(Collection<? extends E> c):
按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表.
参数:c - 要将其元素放入此列表的集合