我创建了一个程序来说明问题的本质。
我希望最后的twoDim ArrayList为[[a],[a,b],[a,b,c]],其中a,b和c是字符串。
我想继续编辑temp ArrayList,当我添加了我想要的字符串temp时,我想将temp添加到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);
}
谢谢:)
答案 0 :(得分:2)
调用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);