Java List嵌套List容易出错的地方

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]]

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注