我正在尝试在for循环中的arraylist中添加一个arraylist。当我清除第二个数据中的数据时,它会在第一个arraylist中的第二个arraylist数据中清除。让我用代码解释一下:
ArrayList arrTemp = new ArrayList();
ArrayList arrTemp2 = new ArrayList();
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 10; j++)
{
//Here I add some strings in arrTemp
}
arrTemp2.add(arrTemp); //I will add arrTemp 10 times with different data in it to arrTemp2
arrTemp.clear(); //Everytime I want to clear the arrTemp
//But when I clear it, it also clears already added arrTemp in arrTemp2
}
我希望它在arrTemp2中有10个不同的arrTemp
答案 0 :(得分:2)
for(int i = 0; i < 10; i++)
{
arrTemp = new ArrayList();
for(int j = 0; j < 10; j++)
.....
每个i
都有不同的数组。
答案 1 :(得分:1)
arrTemp2.add(arrTemp);// will add arrTemp object's reference to your arrTemp2.
因此,一旦你清除arrTemp,你实际上将清除()arrTemp指向的空间。
将泛型与addAll()一起使用,如下所示:
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(2);
ArrayList<Integer> al2 = new ArrayList<Integer>();
al2.add(3);
al.addAll(al2);
al2.clear();
System.out.println(al);
}
O / P: [1,2,3]
你的案子:
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(1);
al.add(2);
ArrayList al2 = new ArrayList();
al2.add(3);
al.add(al2);
al2.clear();
System.out.println(al);
}
O / P: [1,2,[]] //第3项被视为对象
答案 2 :(得分:0)
我不是肯定的,但在我看来你的addTemp2.add(arrTemp)没有按预期工作。您是否尝试过调试并检查arrTemp2是否在该行触发后实际填充了某些内容?查看ArrayLists的文档(下面),我想你可能想要addAll。或者,您可以在清除arrTemp之前迭代arrTemp并将每个元素分别添加到arrTemp2。
http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
答案 3 :(得分:0)
容易..
替换
arrTemp.clear();
与arrTemp = new ArrayList();