只有我添加的最终数组列表被克隆到 2 维 ArrayList 的所有元素。
Only the final Array list I'm adding is cloned to all elements of the 2 Dimensional ArrayList.
我创建了一个程序来说明问题的本质。
我希望最终的 twoDim ArrayList 为 [[a], [a,b], [a,b,c]],其中 a、b 和 c 是字符串。
我想继续编辑临时 ArrayList,当我添加了要临时的字符串后,我想将临时添加到 twoDim。
这是演示代码,您可以取消注释打印以查看过程不同阶段的 twoDim。
public static void main(String args[])
{
ArrayList<ArrayList<String>> twoDim = new ArrayList<ArrayList<String>>();
ArrayList<String> temp = new ArrayList<String>();
int i=0, j=0;
//System.out.println(twoDim);
temp.add("a");
twoDim.add(temp);
//System.out.println(twoDim);
temp.clear();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
twoDim.add(temp);
//System.out.println(twoDim);
temp.clear();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
temp.add("c");
twoDim.add(temp);
System.out.println(twoDim);
}
谢谢:)
调用 temp.clear();
是不够的。您必须为外部 ArrayList
的每个元素创建一个新的 ArrayList
实例。
否则,您的外部 ArrayList
将多次包含相同的内部 ArrayList
实例。
ArrayList<String> temp = new ArrayList<String>();
int i=0, j=0;
//System.out.println(twoDim);
temp.add("a");
twoDim.add(temp);
//System.out.println(twoDim);
temp = new ArrayList<String>();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
twoDim.add(temp);
//System.out.println(twoDim);
temp = new ArrayList<String>();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
temp.add("c");
twoDim.add(temp);
我创建了一个程序来说明问题的本质。
我希望最终的 twoDim ArrayList 为 [[a], [a,b], [a,b,c]],其中 a、b 和 c 是字符串。
我想继续编辑临时 ArrayList,当我添加了要临时的字符串后,我想将临时添加到 twoDim。
这是演示代码,您可以取消注释打印以查看过程不同阶段的 twoDim。
public static void main(String args[])
{
ArrayList<ArrayList<String>> twoDim = new ArrayList<ArrayList<String>>();
ArrayList<String> temp = new ArrayList<String>();
int i=0, j=0;
//System.out.println(twoDim);
temp.add("a");
twoDim.add(temp);
//System.out.println(twoDim);
temp.clear();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
twoDim.add(temp);
//System.out.println(twoDim);
temp.clear();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
temp.add("c");
twoDim.add(temp);
System.out.println(twoDim);
}
谢谢:)
调用 temp.clear();
是不够的。您必须为外部 ArrayList
的每个元素创建一个新的 ArrayList
实例。
否则,您的外部 ArrayList
将多次包含相同的内部 ArrayList
实例。
ArrayList<String> temp = new ArrayList<String>();
int i=0, j=0;
//System.out.println(twoDim);
temp.add("a");
twoDim.add(temp);
//System.out.println(twoDim);
temp = new ArrayList<String>();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
twoDim.add(temp);
//System.out.println(twoDim);
temp = new ArrayList<String>();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
temp.add("c");
twoDim.add(temp);