2017-05-05 139 views
0

我有两个私有成员变量的对象anObjectJava的ArrayList的拷贝构造函数

public class anObject { 
    private String name; 
    private ArrayList<String> myList = new ArrayList<String>(); 
} 

我有一个构造函数:

public anObject() { 
    name = ""; 
} 

我有我的拷贝构造函数:

public anObject(anObject copy) { 
this(); 
newObject(copy); 
} 

public void newObject(anObject copyTwo) { 
    name = copyTwo.name; 
    // How to deep copy an ArrayList? 
} 

但是,我怎样才能将我的ArrayList的所有元素“深度拷贝”到copyTwo,我的this.myList

我已经看过关于SO的其他问题,但他们的ArrayList都包含对象,而我的只是包含字符串。谢谢你的帮助!

+1

是什么让你觉得'String'不是一个对象? –

+0

如果你想为你的列表做一个深层拷贝,你只需要在你的列表中使用一个foreach –

+0

'ArrayList'有一个[拷贝构造函数](https://docs.oracle.com/javase/7/docs/api/java/ util/ArrayList.html#ArrayList(java.util.Collection)),你可以使用它。 –

回答

4

创建一个新的参考名单,因为你的名单持有字符串和字符串是不可变的,你可以这样做:

List<String> copyString = new ArrayList<>(original); 
+0

所以这对于我所看到的“浅拷贝”来说不会有问题?我不希望更改一个对象来影响另一个对象。 – Coder117

+0

您正在使用'String'列表。这不可以 。 – davidxxx

+0

@davidxxx非常感谢! – Coder117

1

您可以使用新集合进行深层复制。在新系列的变化不会影响前面的列表

List<String> copyTwo= new ARrayList<String>(); 
copyTwo.addAll(myList); 
+2

为什么不能:'列表 copyTwo = new ArrayList (myList);'? – assylias

+1

嗨,这里在stackoverflow,我们不只是提供代码的问题。我们向他们解释为什么这将解决他们的问题,或者它是如何工作的。请编辑你的答案,以反映这种心态:) – CraigR8806

+0

另一种选择做到这一点 –