这是我在 Stack 上的第一个问题!我在使用 add 方法用数组列表填充二维数组列表时遇到了一个小问题。将我的第一个数组列表添加到二维数组列表并尝试重新填充相同的一维数组列表后,再次将此一维数组列表添加到二维数组列表似乎会改变我添加的二维数组列表的第一个元素......
ArrayList<ArrayList<String>> twoDArray = new ArrayList<ArrayList<String>>();
ArrayList<String> oneDArray = new ArrayList<String>();
oneDArray.add("a");
twoDArray.add(oneDArray);
System.out.println("First element in twoDArray: " + twoDArray.get(0)); //prints [a]
twoDArray.add(oneDArray);
oneDArray.clear();
oneDArray.add("b");
twoDArray.add(oneDArray);
System.out.println("First element in twoDArray:" + twoDArray.get(0)); //prints [b]
实际上, oneDArray 实际上是迭代器内的局部变量,因此我试图重用它。我将元素添加到 oneDArray,当检查返回 true 时,我将 oneDArray 添加到 twoDArray,清空 oneDArray,然后继续此过程,创建列表列表。
这是否与 twoDArray.get(0) 实际上持有指向 oneDArray 的指针有关,而不是它的实际值?如果是这样,我该如何解决这个问题?
任何帮助将非常感激 :)
编辑:上述问题的解决方案
ArrayList<ArrayList<String>> twoDArray = new ArrayList<ArrayList<String>>();
ArrayList<String> oneDArray = new ArrayList<String>();
oneDArray.add("a");
twoDArray.add(new ArrayList<String>()); // Create new arraylist inside twoDArray
twoDArray.get(0).add(oneDArray.get(0)); // Populate new arraylist rather than hold reference to oneDArray
oneDArray.clear();
oneDArray.add("b");
twoDArray.add(new ArrayList<String>());
twoDArray.get(1).add(oneDArray.get(0));