Hablemos primero de la conclusión.
res.add(list)
Es una copia superficial,
res.add(new ArrayList(list))
es una copia profunda.
Mira el codigo
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> res_2 = new ArrayList<ArrayList<Integer>>();
res.add(list);
res_2.add(new ArrayList<Integer>(list));
System.out.println("res为:");
System.out.println(res);
System.out.println("res_2为:");
System.out.println(res_2);
list.add(4);
res.add(list);
res_2.add(new ArrayList<Integer>(list));
System.out.println("res为:");
System.out.println(res);
System.out.println("res_2为:");
System.out.println(res_2);
}
}
para resumir
res.add(list)
Después de agregar una lista, si la lista cambia, el valor en res 会
cambiará en consecuencia.
res.add(new ArrayList(list))
Después de agregar una lista, si la lista cambia, el valor en res 不会
cambiará en consecuencia.
Blog de referencia
https://blog.csdn.net/weixin_42707971/article/details/107609388