ArrayList从其他ArrayList中删除对象?

时间:2017-05-24 16:47:32

标签: java arraylist

所以,我有这个用例:

ArrayList<String> test1 = new ArrayList<String>();
test1.add("string1");
test1.add("string2");

ArrayList<String> test2 = test1;
test2.remove(0);
System.out.println(test1.get(0)); // Expect to see "string1"

第一个ArrayList test1有两个String元素。然后我创建一个新的(?)ArrayList,test2,它与test1相同。当我从test2删除第一个元素(即“string1”)然后尝试显示test1中的第一个元素时,它返回“string2”...还有第一个元素“string1”以某种方式删除。

这怎么可能?

4 个答案:

答案 0 :(得分:1)

  

然后我创建一个新的(?)ArrayList,test2,它与test1相同。

不,你没有。你刚刚把你的arraylist 2指向了arraylist 1.

您可以使用列表的Shallow构造函数或使用addAll方法。

List<String> test2 = new ArrayList<String>();
test2.addAll(test1);

答案 1 :(得分:0)

您要将read()的引用分配给test1。这意味着,test2都引用同一个实例,

因此,调用一个方法,实际上也会反映在另一个方面,因为它们指的是同一个对象。

要实现您的目标,请执行

ArrayList

这会将List<String> test2 = new ArrayList<>(test1); 的内容复制到test1

答案 2 :(得分:0)

使用与test1

相同的元素创建一个新的 ArrayList
ArrayList<String> test2 = new ArrayList<>(test1)

答案 3 :(得分:0)

    ArrayList<String> test1 = new ArrayList<String>();
    test1.add("string1");
    test1.add("string2");

    ArrayList<String> test2 = test1;
    test2.remove(0);
    System.out.println(test1.get(0)); // Expect to see "string1"

    ArrayList<String> test3 = new ArrayList<>();

在调试中运行代码时,您可以看到test1和test2的引用指向同一位置。这是因为您没有复制值,而是将相同的引用分配给其他列表。请注意,test3的引用与其他2的引用不同。

只需复制您可以使用的值

test2 = new ArrayList<Object>(test1);

请查看下面附带的图像以查看参考值。

Result of running the code stated above in debug