我有Customer类,其中包含5个字段。 我在ArrayList< Customer>中有10个Customer类的唯一实例。 firstlist。 我将firstlist内容复制到新的ArrayList< Customer>使用方法的第二个清单列表:
public void copy( ArrayList<Customer> a, ArrayList<Customer> b){
for (int i=0;i<a.size();i++){ b.add(a.get(0)); } }
问题是如果我更改了第二个列表实例,它也会因为引用而更改第一个实例..
如何将firstlist实例复制到secondlist,这样当我更改secondlist实例时,它不会影响firtlist实例(自身的副本)。有没有办法可以做到这一点?
答案 0 :(得分:0)
似乎您需要克隆Customer
个实例。
检查Cloneable
界面:
http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html
并在Customer
中实现它,然后在你的循环中添加克隆到
第二个列表,而不是原件:b.add(a.get(i).clone());
。
答案 1 :(得分:0)
我建议您通过实施clone向Customer
课程添加Cloneable。
public void copy( ArrayList<Customer> a, ArrayList<Customer> b){
for (int i=0;i<a.size();i++){
b.add(a.get(i).clone()); // get(i) I think.
}
}
答案 2 :(得分:0)
您需要一些执行Customer
实例的深层副本的方法。有几种方法可以执行此操作:实现clone()
,创建复制构造函数,或编写自己的deepCopy()
方法或类似的方法,以返回它所调用的对象的深层副本。你使用哪一个取决于你。
复制构造函数是构造函数,它接受与参数相同的对象的实例。通常,复制构造函数只是将传递对象的所有字段深度复制到新构造的字段,因此很容易实现。
deepCopy()
或其他此类方法将以类似的方式实施。
我听说过Java clone()
方法的不同之处,我通常倾向于使用其他方法来执行深层复制,但是您可以通过实现Cloneable
接口来实现并正确实施clone()
方法