如何在java中复制二维数组?

时间:2014-04-30 23:12:40

标签: java

假设我有一个二维数组如下:

double [] [] a = {{1,0,0},{0,0,1},{0,1,0}};

我需要在循环中使用这个'a',每次都作为方法的输入。根据该方法的输出,该2-D阵列的一个元素可以改变。例如:

double [][] new_a=a;
new_a[0][0]=0;

我想将新a存储在Hash-map中:

HashMap<Integer,double[][]> Store=new HashMap<Integer,double[][]>();
Store.put(size.Store(),new_a);

下次在循环中我需要原来的'a'。我不知道如何从2-D数组'a'复制,以便每次在循环中使用原始数据并将新数据存储在Hash-map中。

当我像上面那样进行编码时,它也会更改原始的“a”,当我想要存储在“Store”中时,它会替换所有先前存储的数组的new_a。

我想知道你是否可以帮我解决这个问题?感谢。

2 个答案:

答案 0 :(得分:0)

确保您在循环之外定义double [][] new_a = aHashMap<Integer,double[][]> Store=new HashMap<Integer,double[][]>()。我认为你可能正在重新定义循环中的所有内容。你能展示代码的扩展版本以查看循环本身吗?

答案 1 :(得分:0)

两种方法。第二是更快,应该是O(n),我beleave。

for(int i=0; i<old.length; i++)
  for(int j=0; j<old[i].length; j++)
    old[i][j]=current[i][j];

 int[][] src //Old one you want a copy of
    int length = src.length;
        int[][] target = new int[length][src[0].length];
        for (int i = 0; i < length; i++) {
            System.arraycopy(src[i], 0, target[i], 0, src[i].length);
        }