繁体   English   中英

ArrayList内ArrayList的异常行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM