Java List嵌套List容易出错的地方
Java 中一个变量在存储引用类型时,保存的是这个对象的地址,所以当我们把定义这样的一个List<List<Integer>>用来保存List时,会有一些问题,下面这段代码可以说明这个问题
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> list1=new ArrayList<>(); List<List<Integer>> list2=new ArrayList<>(); for(int i=0; i<5;i++){ list1.add(i); } System.out.println("list1: "+Arrays.toString(list1.toArray())); list2.add(list1); System.out.println("list2: "+Arrays.toString(list2.toArray())); list1.clear(); System.out.println("list1: "+Arrays.toString(list1.toArray())); System.out.println("list2: "+Arrays.toString(list2.toArray())); } }
打印的结果是
list1: [0, 1, 2, 3, 4]
list2: [[0, 1, 2, 3, 4]]
list1: []
list2: [[]]
明显看出在list1执行clear()方法之后,list2里面的数据也清空了,所以要用这种方式向list2中添加list1
list2.add(new ArrayList<>(list1));
打印结果是
list1: [0, 1, 2, 3, 4]
list2: [[0, 1, 2, 3, 4]]
list1: []
list2: [[0, 1, 2, 3, 4]]