我有一个数组,它会在我的程序中更新,我需要跟踪所有更新。所以我试图将每次更新的数组存储在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
任何人都可以帮我解决这个问题吗?感谢。
答案 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())的操作 它应该很容易使用原语