Parlons d'abord de la conclusion
res.add(list)
C'est une copie superficielle, c'est
res.add(new ArrayList(list))
une copie profonde.
Regardez le code
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);
}
}
Pour résumer
res.add(list)
Après avoir ajouté une liste, si la liste change, la valeur de res 会
changera en conséquence.
res.add(new ArrayList(list))
Après avoir ajouté une liste, si la liste change, la valeur de res 不会
changera en conséquence.
Blog de référence
https://blog.csdn.net/weixin_42707971/article/details/107609388