清除特定的arraylist而不是它的所有副本

时间:2013-11-29 05:45:21

标签: java arraylist

当我清除其中一个arraylist时,它会清除该arraylist的所有副本。

ArrayList<String> testa = new ArrayList<String>();
ArrayList<String> testb = new ArrayList<String>();
testa.add("Dog");
testb = testa;
testa.clear();

现在testb也被清除了。反正有没有避免这个?

3 个答案:

答案 0 :(得分:3)

由于testb正在审核testa。那时更改b也会发生变化。

当你执行testb = testa;时,就像

一样
+-----+
| testa |--------\
+-----+         \    +----------------+
                 --->| (same list)    |
+-----+         /    |  testa         |
| testb |--------/   +----------------+
+-----+

如果您不想这样做,请创建独立ArrayList

将实际列表传递给新constructor

ArrayList<String> testa = new ArrayList<String>();
testa.add("Dog");
ArrayList<String> testb = new ArrayList<String>(testa);
testa.clear();

或使用addAll方法

  ArrayList<String> testa = new ArrayList<String>();
  testa.add("Dog");
  ArrayList<String> testb = new ArrayList<String>();
  testb.addAll(testa);
  testa.clear();

答案 1 :(得分:1)

    ArrayList<String> testa = new ArrayList<String>();
    ArrayList<String> testb = new ArrayList<String>();
    testa.add("Dog");
    List<String> testb = new ArrayList<String>(testa);
    testa.clear();

答案 2 :(得分:1)

此时:

ArrayList<String> testa = new ArrayList<String>();
ArrayList<String> testb = new ArrayList<String>();

testatestb是他们自己独立的唯一实例,指向两个不同的ArrayList引用。如果你改变一个,你不会影响另一个。

点:

testb = testa;

您现在已将testb设置为指向与testa相同的引用。使用testb完成的任何操作都会影响testa,反之亦然。

如果您要将testa中的元素复制到testb,请使用ArrayList作为您的参数的新testb实例:

testb = new ArrayList<>(testa);