0

我正在传递一个回调方法(List a),我想知道如何复制该值。

List<addresses> mInstanceList;
public void setMyList(List<Address> addresses)
{
  mInstanceList = addresses;     // is this going to work?
}
4

3 回答 3

4

你是说新副本吗?如果是这样,你可以做类似的事情mInstanceList=new Arraylist(addresses);

于 2012-08-10T02:54:37.913 回答
1

在那里,您正在复制对地址指向mInstanceList的列表的引用。如果其他人更改了该列表的元素,它将反映在mInstanceList中。如果您不想这样,您可以创建一个新列表(可能是一个 ArrayList)并以相同的顺序复制地址列表的内容。

mInstanceList = new ArrayList<Address>();
for (Address a: addresses) {
    mInstanceList.add(a);
}
于 2012-08-10T02:55:20.427 回答
0

1.如果要复制列表并将其分配给具有自己副本的列表引用变量,请使用Copy Constructor.

例如:

ArrayList<Address> list1 = new ArrayList<Address>();

ArrayList<Address> list2 = new ArrayList<Address>(list2);

对 list1 引用的 ArrayList 对象所做的更改不会反映到 list2 引用的 ArrayList 对象中,因为它们都指向堆上的 2 个不同的 ArrayList 对象。

2.如果你只想让列表引用变量指向堆上的同一个对象,那么这样做..

ArrayList<Address> list1 = new ArrayList<Address>();

ArrayList<Address> list2 = list1 ;

由于现在引用 list1 和 list2 都指向堆上的同一个 ArrayList 对象,因此一个人所做的更改将反映在另一个人身上。

于 2012-08-10T05:03:25.277 回答