1.创建两个集合:
public static ArrayList<Integer> path = new ArrayList<>();
public static ArrayList<ArrayList<Integer>> res = new ArrayList<>();
共同点:
都是向res这个ArrayList
中填加了一个名为path的集合
不同点:
-
res.add(new ArrayList(path))
:开辟一个独立地址,地址中存放的内容为path集合,后续path的变化不会影响到res。 -
res.add(path)
:将res尾部指向了path地址,后续path内容的变化会导致res的变化。
2.实例:
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
List<List<Integer>> result = new ArrayList<>();
//1.输出为空
System.out.println(result);
//2.第一次添加,res值应该为123
result.add(list);
System.out.println(result);
//3.第二次添加,res值按照自己的猜想应该是123,1234
list.add(4);
result.add(list);
System.out.println(result+"发现两个元素竟然一样");
输出:
正确代码如下:
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
List<List<Integer>> result = new ArrayList<>();
//1.输出为空
System.out.println(result);
//2.第一次添加,res值应该为123
result.add(new ArrayList<>(list));
System.out.println(result);
//3.第二次添加,res值按照自己的猜想应该是123,1234
list.add(4);
result.add(new ArrayList<>(list));
System.out.println(result+"发现两个元素不一样");