2014-04-30 34 views
0

假设我有一个如下的二维数组:如何在java中制作二维数组的副本?

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

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

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

我想在新的商店中的散列地图:

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

在循环下一次我需要原来的“A”虽然。我不知道如何从二维数组'a'制作副本,以便每次在循环中使用原始副本并将新副本存储在哈希映射中。

当我按照上面的方式进行编码时,它也会更改原来的'a',当我想存储'Store'时,它会替换之前存储的所有数组的new_a。

不知您是否可以帮我解决这个问题?谢谢。

+0

怎么样的内循环的循环! –

+0

我有一个循环。其实我没有在这里展示整个代码。每次我改变'new_a'时,它都会自动改变'a'! – user3586916

+2

[制作数组Java副本]的可能副本(http://stackoverflow.com/questions/5785745/make-copy-of-array-java) – Asthor

回答

0

确保您在循环的外部定义了double [][] new_a = aHashMap<Integer,double[][]> Store=new HashMap<Integer,double[][]>()。我认为这可能是你的问题,你正在循环中重新定义一切。你能展示你的代码的扩展版本来看看循环本身吗?

+0

主代码是如此之大,放在这里。我再次检查。我没有在循环中定义它们。 – user3586916

0

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

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); 
     } 
+0

它仍然是O(n^2),你只会得到更好的常量 – miniBill