2

我有一个成对列表。如果我使用equal,它会复制每一组吗?

List<HashSet<Pair>> list1 = new ArrayList<HashSet<Pair>>();
List<HashSet<Pair>> list2 = new ArrayList<HashSet<Pair>>();

list1.add(0, new HashSet<Pair>());
list1.add(1, new HashSet<Pair>());
list1.add(2, new HashSet<Pair>());
list1.add(3, new HashSet<Pair>());

如果我这样做list2 = list1,它会完美复制吗?因为当我使用它时,它会崩溃。

Iterator<Pair> it1 = list2.get(0).iterator();
Iterator<Pair> it2 = list2.get(1).iterator();
Iterator<Pair> it3 = list2.get(2).iterator();
Iterator<Pair> it4 = list2.get(3).iterator();
4

2 回答 2

4

不。分配不会复制任何内容,而是将 list2 引用更新为指向 list1。因此,您可以像使用 list1 一样使用 list2;但是您对 2 所做的更改将反映在 1 中。

于 2012-07-22T18:00:18.693 回答
4
list2 = list1

此分配只是将引用分配给与list2相同的 List 点list1。(请注意,只有一个列表有两个引用。)如果要复制列表,则需要使用复制构造函数:

list2 = new ArrayList<HashSet<Pair>>(list1);
于 2012-07-22T18:03:28.073 回答