2014-04-29 74 views
0

我有一個數組,它會在我的程序中得到更新,我需要跟蹤所有更新。所以我試圖將每次更新的數組存儲在ArrayList中。例如:如何在java中更新後每次更新數組?

double[]a={1,2,3} 
List<double[]> Store = new ArrayList<double[]>(); 
Store.add(a); 

然後我會更新 'A',如: 一個[0] = 10; 然後我想在'Store'末尾的另一行存儲新的'a': Store.add(a)

但是,一旦我嘗試在'Store'ArrayList中存儲新'a'它會自動更新之前的'a'。所以,它給了我這個輸出「商店」: 10,2,3 10,2,3

但是我需要有以下輸出「商店」來代替:

1,2,3 10,2,3

任何人都可以幫我解決這個問題嗎?謝謝。

+0

你爲什麼要使用數組列表的圖元的工作? –

回答

3

您有一個數組,並且您不斷將對該數組的引用添加到列表中。

你可以考慮:

double[] a = {1,2,3}; 
List<double[]> store = new ArrayList<double[]>(); 
store.add(Arrays.copyOf(a, a.length)); 

..存儲的 'A' 每一次新的副本。

+0

非常感謝。我非常感謝你的幫助。這工作。 – user3586916

0

Java中的數組通過引用傳遞。這意味着當您添加「a」時,您將添加對「a」的引用,並且當您更改「a」時,該數組的所有其他實例也會發生更改。

你需要做的是複製數組到一個新的數據,並將其存儲。您可以使用System.arraycopy()。

0

問題是,您只是更新'double [] a'的值,而不是爲每個不同的副本創建新的數組,因此您要在數組中添加更多相同引用的副本。

您可能想在添加它之前使用System.ArrayCopy,或者只是創建一個新的數組實例。

0

arraysare對象,你正在做副作用。

做類似Store.add(a.clone()) 它應該伊斯利