我正在学习在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);
}
}
答案 0 :(得分:0)
a
引用了列表b
。它是参考而非副本。因此,如果您清除b
,a
中的所有值都会被清空。然后你添加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);
}