将ArrayList值分配给另一个

Mah*_*oud 0 java arraylist

我有许多函数将全局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,我不知道为什么?.

谢谢..

Vis*_*l K 6

排队 :

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 - 要将其元素放入此列表的集合