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中创建一个对象的深层副本
| 归档时间: |
|
| 查看次数: |
4628 次 |
| 最近记录: |