我有一个带有数组作为参数的对象,我试图以一种我可以修改它的方式复制该对象而不修改另一个。 这是我的班级:
public class Matrix {
int rows[];
Matrix() {
rows = new int[9];
}
int[] getRows() {
return rows;
}
void setRow(int x, int y) {
rows[x] = y;
}
int getRow(int x) {
return rows[x];
}
}
我想做类似的事情:
(Consider Object Matriz x is all filled with values)
Matrix k = new Matrix();
k = x;
(Now I want to modify a specific column without of k without modifying a column of x)
k.setRow(3, 3);
但是当我做k = x;
时,由于引用,我得到的两个数组都相同如何避免这种情况并复制它们而不是创建引用?我想避免逐个单元格复制,以避免增加运行时间。 (一种解决方案是使用带有int值的子类Cell创建一个原始类Matriz,但除此之外?)
由于
答案 0 :(得分:2)
首先,你打电话给你的班级Matrix
,但它不是一个矩阵。它只有一个维度,因此Vector
会更准确。
为了复制您的实例,您可以使用复制构造函数。
Matrix(Matrix other) {
rows = Arrays.copyOf(other.rows, other.rows.length);
}
您可以通过以下方式创建x的副本:
Matrix k = new Matrix(x);
答案 1 :(得分:1)
您可以创建第二个构造函数,将另一个Matrix作为参数并复制它。
public Matrix(Matrix matrix) {
int[] matrixRows = m.getRows();
this.rows = new int[matrixRows.length];
for(int i = 0; i < matrixRows.length; i++) {
this.rows[i] = matrixRows[i];
}
}
答案 2 :(得分:1)
您必须创建一个新的Matrix
。
由于rows
是一个整数数组,因此您只需使用Arrays.copyOf(rows, rows.length)
进行复制即可。
有两种常见方式:
1 /创建一个以Matrix
作为输入的构造函数:
public Matrix(Matrix matrix){
this.rows = Arrays.copyOf(matrix.rows, matrix.rows.length);
}
然后Matrix k = new Matrix(x);
2 /实现Cloneable
:
@Override
public Matrix clone() {
Matrix m = new Matrix();
m.rows = Arrays.copyOf(this.rows, this.rows.length);
return m;
}
然后Matrix k = x.clone();
当然,您也可以混合使用以下两种方法:)