用map集合或者list集合存放list集合

本文通过两个示例详细解释了在Java中如何正确使用List存储数据,避免数据覆盖问题。首先,展示了如何在循环中每次新建一个List实例并使用`add(int i, list)`方法添加到外层List,以确保每个循环都有独立的List对象。然后,讨论了使用Map来存储List的情况,分别演示了存储多个List值和单个List值的方法,强调了在Map中使用键值对存储数据的灵活性。
摘要由CSDN通过智能技术生成

1.用list集合存放list

注意:

在每一次往List<List>中添加list时,都应该重新在内存中开辟一个list空间便于给存放新的数据到list中
List<List>存放list类型的数据要使用用add(int i,list)方法而不是add(list),这样的话在每次new一个list集合时,List<List>都只存放一个数据,之前的list数据会被覆盖(还是list在开辟的内存中指向的问题),只输出最后一次循环的数据。所以要规定每次这个数据要存放到哪里,使用add(int i,list)方法。
要给list存放数据时,每次都要new一个list,不new的话list在内存中只开辟一个list对象,每次往里面存放数据时,list都指向这一个对象。所以要达到每次循环都有不一样的list时,在循环下面重新在内存中开辟新的list

public static void main(String[] args) {
        List<List<User>> list = new ArrayList<>();

        for (int i = 0; i < 2; i++) {
            List<User> list1 = new ArrayList<>();
            list1.add(new User("1","zhangsan"));
            list1.add(new User("2","lisi"));
            list1.add(new User("3","wangwu"));
            list.add(list1);
        }
        System.out.println("list: "+list);
}

运行结果 

不能写成这样

public static void main(String[] args) {
        List<List<User>> list = new ArrayList<>();
        List<User> list1 = new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            
            list1.add(new User("1","zhangsan"));
            list1.add(new User("2","lisi"));
            list1.add(new User("3","wangwu"));
            list.add(list1);
        }
        System.out.println("list: "+list);
}

否则结果为:

则会出现以上问题,每次按照定义的循环add完之后才能添加(会导致重复数据) 

2.用map集合存储list

//当添加多个值的时候:
 public static void main(String[] args) {
        List<List<User>> list = new ArrayList<>();
        Map<String,List<User>> map = new HashMap<>();
        for (int i = 0; i < 2; i++) {
            List<User> list2 = new ArrayList<>();
            list2.add(new User("1","zhangsan"));
            list2.add(new User("2","lisi"));
            list2.add(new User("3","wangwu"));
            map.put("list"+i,list2);
        }
}

//当添加一个list集合时:
public static void main(String[] args) {
        List<List<User>> list = new ArrayList<>();
        Map<String,List<User>> map = new HashMap<>();
        List<User> list2 = new ArrayList<>();
        list2.add(new User("1","zhangsan"));
        list2.add(new User("2","lisi"));
        list2.add(new User("3","wangwu"));
        map.put("list"+i,list2);
        
}

 多个list值的结果

 一个list值的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值