用Java复制对象/数组

时间:2015-03-16 10:42:51

标签: java

我有一个带有数组作为参数的对象,我试图以一种我可以修改它的方式复制该对象而不修改另一个。 这是我的班级:

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,但除此之外?)

由于

3 个答案:

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

当然,您也可以混合使用以下两种方法:)