Java 集合的嵌套


集合的嵌套

  • 任何集合内部都可以存储其它任何集合;
  • 嵌套 = 套住;

1. List 嵌套 List

  • ArrayList<ArrayList<String>>
import java.util.ArrayList;

public class test {
    public static void main(String[] args) {
        /*
			假如有两个班的学生姓名,它们分别存储在两个集合中:
		*/
        //第一个班
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("迪丽热巴");
        list1.add("古力娜扎");
        list1.add("柳岩");
        list1.add("杨幂");

        //第二个班
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("蔡徐坤");
        list2.add("杨坤");
        list2.add("陈伟霆");
        list2.add("李易峰");

        //将两个集合存储到一个集合中
        ArrayList<ArrayList<String>> allList = new ArrayList<>();
        allList.add(list1);
        allList.add(list2);

        //遍历allList,取出每个ArrayList
        for (ArrayList<String> list : allList) {
            //遍历每个班的ArrayList
            for (String s : list) {
                System.out.println(s);
            }
        }
    }
}
/*
输出
迪丽热巴
古力娜扎
柳岩
杨幂
蔡徐坤
杨坤
陈伟霆
李易峰
 */

2. List 嵌套 Map

  • ArrayList<Map<String,String>>
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class test{
    public static void main(String[] args){
        /*
        	有两个班的学员,分别存储在两个Map中
        */
        //第一个班:
        Map<String,String> map1 = new HashMap<>();
        map1.put("001","迪丽热巴");
        map1.put("002","古力娜扎");

        //第二个班:
        Map<String,String> map2 = new HashMap<>();
        map2.put("001","蔡徐坤");
        map2.put("002","李易峰");

        //将两个班的map存储到一个ArrayList中
        ArrayList<Map<String,String>> allList = new ArrayList<>();
        allList.add(map1);
        allList.add(map2);

        //遍历allList,取出每个Map
        for(Map<String,String> map : allList){
            //遍历map
            Set<String> keys = map.keySet();
            for(String key : keys){
                System.out.println(key + " - " + map.get(key));
            }
        }
    }
}
/*
输出
001 - 迪丽热巴
002 - 古力娜扎
001 - 蔡徐坤
002 - 李易峰
 */

3. Map 嵌套 Map

  • Map<String, Map<String, String>>
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class test {
    public static void main(String[] args) {
        /*
        有两个班,班号分别为:"1期"和"2期",两个班学员的姓名分别存储在两个Map中
        */
        //"1期":
        Map<String, String> map1 = new HashMap<>();
        map1.put("it001", "迪丽热巴");
        map1.put("it002", "古力娜扎");

        //"2期":
        Map<String, String> map2 = new HashMap<>();
        map2.put("001", "蔡徐坤");
        map2.put("002", "李易峰");

        //将两个班的Map连同对应的"班号"一同存储在一个Map中
        Map<String, Map<String, String>> allMap = new HashMap<>();
        allMap.put("1期", map1);
        allMap.put("2期", map2);

        //遍历allMap
        //取出对应的map的键
        Set<String> keys = allMap.keySet();
        for (String k : keys) {
            System.out.println(k + ":");
            //取出对应的map的键
            Map<String, String> map = allMap.get(k);
            //转换为set遍历map的值
            Set<String> keys2 = map.keySet();
            for (String k2 : keys2) {
                System.out.println(k2 + " = " + map.get(k2));
            }
        }
    }
}
/*
输出
2期:
001 = 蔡徐坤
002 = 李易峰
1期:
it002 = 古力娜扎
it001 = 迪丽热巴
 */

4. Map 嵌套 List

  • 通过书类型来查找对应书目;
import java.util.*;

class Book {
    private String name;

    public Book(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

public class Test {
    public static void main(String[] args) {
        ArrayList<Book> book = new ArrayList<>();
        book.add(new Book("金瓶梅"));
        book.add(new Book("聊斋志异"));
        book.add(new Book("人间失格"));
        book.add(new Book("失乐园"));

        HashMap<String, ArrayList<Book>> hm = new HashMap<>();
        hm.put("奇书", book);

        System.out.println(hm);
//        用entry遍历
//        Set<Map.Entry<String, ArrayList<Book>>> entries = hm.entrySet();
//        for (Map.Entry<String, ArrayList<Book>> e : entries) {
//            System.out.println(e.getKey() + ": " + e.getValue().toString());
//        }
    }
}
/*
输出
{奇书=[金瓶梅, 聊斋志异, 人间失格, 失乐园]}
 */
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值