我创建了一个程序来说明问题的本质。
我希望最终的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);
关于java - 只有我添加的最终数组列表被克隆到二维数组列表的所有元素。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28524293/