[英]Unexpected behavior of ArrayList inside ArrayList
我正在尝试使用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
有人可以向我解释为什么会这样吗? 谢谢。
循环内Object的预期行为 ,因为s
在每次迭代中都是相同的对象,因此您需要在循环中创建新对象。
像这样更改代码:
for(z=0; z<3;z++)
{
s = new ArrayList<String>();
for(y=0;y<4;y++)
{
s.add(""+w++);
}
x.add(s);
}
您要多次将相同的内部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);
}
上面的程序一遍又一遍地重复使用相同的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("-----------------");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.