2013-02-19 125 views
0

我必須複製矩陣並更改新矩陣,但不想更改初始矩陣。我用arraylist的arraylist代表他們。這裏是我的代碼複製矩陣

ArrayList<ArrayList<Integer>> tempMatrix = new ArrayList<ArrayList<Integer>>(); 
     for(ArrayList<Integer> row : matrix) { 
      for(Integer index : row) { 
       tempMatrix.get(row).add(index); 
      } 
     } 

編譯器說,這是非法使用get方法用於此目的。我還能做些什麼來複制?

+1

查看錯誤.... get用於獲取索引的元素...您正在傳遞的對象而不是索引應該是int。檢查Arraylist javadoc – Shashi 2013-02-19 07:36:45

回答

2

你可以複製整行,爲自己節省了不少麻煩:

ArrayList<ArrayList<Integer>> tempMatrix = new ArrayList<ArrayList<Integer>>(); 
for(ArrayList<Integer> row : matrix) { 
    tempMatrix.add(new ArrayList<Integer>(row)); 
} 
+0

非常感謝!我試圖做到這一點,但我的初始矩陣仍然會改變。沒有任何方法可以通過價值複製,而不是參考? – user2081119 2013-02-19 07:40:14

+0

這很奇怪,因爲'new ArrayList (row)'應該創建一個全新的數組列表來複制'row'的內容。你確定矩陣在其他地方沒有被修改嗎? – nneonneo 2013-02-19 07:41:17

1

嘗試:

for(ArrayList<Integer> row : matrix) { 
     ArrayList<Integer> rowList = new ArrayList<Integer>(); 
     for(Integer index : row) { 
      rowList.add(index); 
     } 
     tempMatrix.add(rowList); 
    } 
1

您需要克隆的ArrayList:

ArrayList<ArrayList<Integer>> tempMatrix = new ArrayList<ArrayList<Integer>>(); 
    for(ArrayList<Integer> row : matrix) { 
     tempMatrix.add(row.clone()); 
    } 

如果你使用新的Arraylist然後你將有一個新的arraylist確實,但它包含的元素將是一個引用傳遞給構造函數參數的數組中包含的元素。