如何通过引用将元素从ArrayList复制到另一个?

Eze*_*rto 2 java constructor arraylist pass-by-value

我正在尝试将每个元素从一个ArrayList(av)复制到另一个(copia).问题在于它们是通过引用复制的,因此每当我对原始版本进行任何更改时,副本也会被修改.当然,这种行为不是必需的.我应该怎么写这个方法?

public void copiarArrayList(ArrayList<Articulo_Venta> copia, ArrayList<Articulo_Venta> av){
    copia.clear();
    for (int i = 0; i < av.size(); i++) {
        copia.add(av.get(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

Articulo_Venta有以下几个字段:

int codigo;
String nombre;
float cantidad;
Run Code Online (Sandbox Code Playgroud)

PS:我也试过了下一个:

copia = new ArrayList<Articulo_Venta>(av);
Run Code Online (Sandbox Code Playgroud)

但它的元素仍然指向原始的ArrayList.

Man*_*odi 10

你想要的是深拷贝.如果您的对象只包含原语,则可以使用clone(),否则最好的方法是手动执行: -

Articulo_Venta类中创建一个构造函数,它接受另一个Articulo_Venta对象并初始化成员变量.

然后将代码更改为: -

public void copiarArrayList(ArrayList<Articulo_Venta> copia, ArrayList<Articulo_Venta> av){
        copia.clear();
        for (int i = 0; i < av.size(); i++) {
            copia.add(new Articulo_Venta(av.get(i)));
        }
Run Code Online (Sandbox Code Playgroud)

也可以在这里阅读 - 如何在java中创建一个对象的深层副本