java二维数组添加方法

时间:2013-08-25 23:10:54

标签: java methods arraylist add

这是我在Stack上的第一个问题!我使用add方法填充了一个带有arraylists的2d arraylist的小问题。将我的第一个arraylist添加到2d arraylist并尝试重新填充SAME 1d arraylist后,再次将这个1d arraylist添加到2d arraylist似乎改变了我添加的2d arraylist的第一个元素...

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添加元素,当一个check返回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));

2 个答案:

答案 0 :(得分:0)

是的,如果你没有在循环中创建oneDArray,只是清除它将覆盖每次迭代,这就是元素丢失的原因。这确实是因为你对同一个内部arraylist有相同的引用。你应该在你的循环中ArrayList<String> innerToBeAdded = new ArrayList<>()条件创建一个新的arraylist。

答案 1 :(得分:0)

你说“我将oneDArray添加到twoDArray,清空oneDArray,然后继续此过程,创建列表列表”,但你真正在做的是多次向twoDArray添加相同的数组。因为完全相同的数组被多次添加到twoDArray,当你清除()它时,它会清除所有值,当你向oneDArray添加一个值时,它将出现在 all < / em> twoDArray中的地方。

而不是清除数组,你应该做的是创建一个新的实例数组:oneDArray = new ArrayList<String>();这将创建一个不同的数组作为twoDArray的每个成员