【问题标题】:Copying ArrayList<Customer> content to another ArrayList<Customer> [duplicate]将 ArrayList<Customer> 内容复制到另一个 ArrayList<Customer> [重复]
【发布时间】:2014-06-15 19:23:46
【问题描述】:

我有包含 5 个字段的 Customer 类。 我在 ArrayList firstlist 中有 10 个唯一的 Customer 类实例。 我使用方法将 firstlist 内容复制到新的 ArrayList secondlist 列表:

public void copy( ArrayList<Customer> a,  ArrayList<Customer> b){
 for (int i=0;i<a.size();i++){ b.add(a.get(0)); } }

问题是如果我更改了 secondlist 实例,它也会因为引用而更改 firstlist 实例..

如何将 firstlist 实例复制到 secondlist 以便当我更改 secondlist 实例时它不会影响到 firtlist 实例(自身的副本)。有什么方法可以做到吗?

【问题讨论】:

  • Customer 类的Copy Constructor 怎么样?创建一个新的客户实例。类似的东西public Customer(Customer c){...}
  • 改成b.add(new Customer(a.get(0));
  • 你必须创建一个deep copy of your list
  • @Braj 你假设Customer 类有这样的构造函数,但这在问题的任何地方都没有说明。
  • @LuiggiMendoza 我提出了一些建议。

标签: java arrays arraylist


【解决方案1】:

看来您需要克隆 Customer 实例。

查看Cloneable接口:

http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html

并在Customer 中实现它,然后在你的循环中添加克隆到
第二个列表,不是原件:b.add(a.get(i).clone());

【讨论】:

  • 检查可能的重复问答,看看为什么这不是一个好的选择。
【解决方案2】:

我建议您通过实现Cloneableclone 添加到您的Customer 类。

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. 
  } 
}

【讨论】:

    【解决方案3】:

    您需要一些方法来执行Customer 实例的深层复制。有几种方法可以做到这一点:实现clone(),创建一个复制构造函数,或者编写你自己的deepCopy() 方法或类似的方法,它返回一个被调用对象的深层副本。使用哪一个取决于您。

    复制构造函数是将相同对象的实例作为参数的构造函数。通常,复制构造函数只是将传递对象中的所有字段深度复制到新构造的对象中,因此很容易实现。

    deepCopy() 或其他此类方法将以类似方式实现。

    我听说过关于 Java 的 clone() 方法的各种不同的事情,我通常倾向于其他执行深度复制的方法,但您可以通过实现 Cloneable 接口并正确实现 clone() 方法来实现

    p>

    【讨论】:

      猜你喜欢
      • 2012-01-16
      • 2018-08-19
      • 2017-11-24
      • 2017-12-30
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多