ArrayList中ArrayList的意外行为

Pat*_*Las 0 java 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("-----------------");
}
Run Code Online (Sandbox Code Playgroud)

输出是:

8
9
10
11

8
9
10
11

8
9
10
11
Run Code Online (Sandbox Code Playgroud)

而不是(我的预期输出):

0
1
2
3

4
5
6
7

8
9
10
11
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么会这样吗?谢谢.

Lrr*_*rrr 8

它是Object内部循环的预期行为,因为s在每次迭代中都是一个相同的对象,所以需要在循环中创建新对象.

像这样更改你的代码:

for(z=0; z<3;z++)
{
    s = new ArrayList<String>();
    for(y=0;y<4;y++)
    {
        s.add(""+w++);
    }
    x.add(s);
}
Run Code Online (Sandbox Code Playgroud)