使用ArrayList时的逻辑错误<arraylist <integer>&gt;集合框架

时间:2017-03-18 18:01:47

标签: java arraylist

我正在学习在java中使用Collections。我制作了一个简单的程序,我希望输出为:

[1, 2, 3]
[[1, 2, 3]]
[5, 6, 7]
[[1, 2, 3], [5, 6, 7]]

我没有得到上面的输出,而是得到了输出:

[1, 2, 3]
[[1, 2, 3]]
[5, 6, 7]
[[5, 6, 7], [5, 6, 7]]

即每次添加一个ArrayList时,都会添加新的,但前一个也会被新的替换。我不希望它被替换。谁能解释一下我在这里发生了什么?我的代码是:

import java.util.*;

class Amit{
public static void main(String args[])
{
    ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> b = new ArrayList<Integer>();

    b.add(1);
    b.add(2);
    b.add(3);

    System.out.println(b);
    a.add(b);
    System.out.println(a);

    b.clear();

    b.add(5);
    b.add(6);
    b.add(7);

    System.out.println(b);
    a.add(b);
    System.out.println(a);

}
}

1 个答案:

答案 0 :(得分:0)

a引用了列表b。它是参考而非副本。因此,如果您清除ba中的所有值都会被清空。然后你添加5,6,7并再次添加id。

ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> b = new ArrayList<Integer>();

b.add(1);
b.add(2);
b.add(3);

System.out.println(b);
a.add(b);  // a= [[1,2,3]]
System.out.println(a);

b.clear();  // a = [[]]

b.add(5); //a = [[5]]
b.add(6); // a=[[5,6]]
b.add(7); // a=[[5,6,7]]

System.out.println(b);
a.add(b); //a=[[5,6,7],[5,6,7]]
System.out.println(a);

}