我正在尝试使用ArrayList<ArrayList<String>>
来解析网页中的某些片段,但我的代码中出现了问题:
ArrayList<ArrayList<String>> x = new ArrayList<ArrayList<String>>();
ArrayList<String> s = new ArrayList<String>();
int z, y, w = 0;
for(z=0; z<3;z++)
{
s.clear();
for(y=0;y<4;y++)
{
s.add(""+w++);
}
x.add(s);
}
for(ArrayList<String> tr : x)
{
for( String t : tr)
{
System.out.println(t);
}
System.out.println("-----------------");
}
输出结果为:
8
9
10
11
8
9
10
11
8
9
10
11
而不是(我的预期输出):
0
1
2
3
4
5
6
7
8
9
10
11
有人可以向我解释为什么会这样吗?感谢。
答案 0 :(得分:8)
<循环中对象的预期行为,因为s
在每次迭代中都是同一个对象,所以需要在循环中创建新对象。
像这样更改你的代码:
for(z=0; z<3;z++)
{
s = new ArrayList<String>();
for(y=0;y<4;y++)
{
s.add(""+w++);
}
x.add(s);
}
答案 1 :(得分:2)
您正在多次向外部ArrayList添加相同的内部ArrayList引用。因此,所有内部ArrayList
都是相同的对象,并包含相同的元素。
您必须为外循环的每次迭代创建一个新实例:
for(z=0; z<3;z++)
{
s = new ArrayList<String>();
for(y=0;y<4;y++)
{
s.add(""+w++);
}
x.add(s);
}
答案 2 :(得分:0)
上面的程序反复重复使用相同的ArrayList(内部列表:s),因此只得到最后一组值,
将第2行(内部Arraylist初始化)移动到循环内部,如下所示,以获得所需的结果,
ArrayList<ArrayList<String>> x = new ArrayList<ArrayList<String>>();
int z,y,w=0;
for(z=0; z<3;z++)
{
ArrayList<String> s = new ArrayList<String>();
for(y=0;y<4;y++)
{
s.add(""+w++);
}
x.add(s);
}
for(ArrayList<String> tr : x)
{
for( String t : tr)
{
System.out.println(t);
}
System.out.println("-----------------");
}