将ArrayList <customer>内容复制到另一个ArrayList <customer> </customer> </customer>

时间:2014-04-29 17:46:34

标签: java arrays arraylist

我有Customer类,其中包含5个字段。 我在ArrayList&lt; Customer&gt;中有10个Customer类的唯一实例。 firstlist。 我将firstlist内容复制到新的ArrayList&lt; Customer&gt;使用方法的第二个清单列表:

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实例(自身的副本)。有没有办法可以做到这一点?

3 个答案:

答案 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)

我建议您通过实施cloneCustomer课程添加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()方法