ArrayList中,add 添加引用类型变量时会直接将该变量的引用添加进去,并不会进行深拷贝复制,因为add()方法如下
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
可以明显看出来,他直接扩充大小然后将待赋值的元素添加,所以如果想要在 ArrayList<ArrayList<>> 中添加一个 ArrayList<> ,添加之后的 ArrayList<> 就不宜再改变。
package com.klaus.tree.prob24;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(3);
arrayList.add(2);
System.out.println(arrayList); // [1, 3, 2]
res.add(arrayList);
System.out.println(res); // [[1, 3, 2]]
arrayList.remove(2);
System.out.println(res); // [[1, 3]]
}
}