如何在java中更新后每次存储更新的数组?

时间:2014-04-29 20:41:52

标签: java

我有一个数组,它会在我的程序中更新,我需要跟踪所有更新。所以我试图将每次更新的数组存储在ArrayList中。例如:

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'。所以它给了我'Store'的输出: 10,2,3 10,2,3

但我需要为'Store'提供以下输出:

1,2,3 10,2,3

任何人都可以帮我解决这个问题吗?感谢。

4 个答案:

答案 0 :(得分:3)

您有一个数组,并且不断将对该数组的引用添加到列表中。

您可以考虑:

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

..每次都存储'a'的新副本。

答案 1 :(得分:0)

Java中的数组通过引用传递。这意味着当你添加“a”时,你正在添加对“a”的引用,当你改变“a”时,该数组的所有其他实例也会改变。

您需要做的是将数组复制到新的数据中,然后存储它。您可以使用System.arraycopy()。

答案 2 :(得分:0)

问题是你只是更新&#39; double [] a&#39;而不是为每个不同的副本创建一个新数组,因此您要在数组中添加更多相同引用的副本。

您可能希望在添加之前使用System.ArrayCopy,或者只是创建一个新的数组实例。

答案 3 :(得分:0)

数组是对象,你正在做副作用。

执行类似Store.add(a.clone())的操作 它应该很容易使用原语