java零基础入门-Map集合练习(下)

举报
喵手 发表于 2024/11/29 01:30:41 2024/11/29
【摘要】 ​ 一、教学目标能够使用HashMap集合实现值为双列集合存放。能够使用HashMap集合实现值为单列集合存放。能够使用HashMap集合实现值为基本数据类型存放。能够使用HashMap集合实现值为对象存放。二、HashMap实现自定义元素存放  3、值存放双列集合        对于值又存放map?map嵌套呀这是,像这种需求,在日常实战中也不是不会遇到,比如定义一个HashMap<Str...

 一、教学目标

  • 能够使用HashMap集合实现值为双列集合存放。
  • 能够使用HashMap集合实现值为单列集合存放。
  • 能够使用HashMap集合实现值为基本数据类型存放。
  • 能够使用HashMap集合实现值为对象存放。

二、HashMap实现自定义元素存放

  3、值存放双列集合

        对于值又存放map?map嵌套呀这是,像这种需求,在日常实战中也不是不会遇到,比如定义一个HashMap<String,Map<String,String>>,如果日常中遇到这种类型的map,你们会不会感到空幻,这也太可怕了吧。

演示代码如下:

    /**
     * 遍历值为map的map集合
     */
    @Test
    public void testMapForByMap() {

        //创建一个map集合容器
        Map<String, Map<String, String>> mapBig = new HashMap<>();

        //分别创建值map
        Map<String, String> mapKey1 = new HashMap<String, String>();
        mapKey1.put("1", "黄忠");
        mapKey1.put("2", "狄仁杰");
        mapKey1.put("3", "虞姬");
        Map<String, String> mapKey2 = new HashMap<String, String>();
        mapKey2.put("1", "妲己");
        mapKey2.put("2", "貂蝉");
        mapKey2.put("3", "甄姬");
        Map<String, String> mapKey3 = new HashMap<String, String>();
        mapKey3.put("1", "吕布");
        mapKey3.put("2", "孙策");
        mapKey3.put("3", "钟无艳");

        //添加到集合中
        mapBig.put("射手", mapKey1);
        mapBig.put("法师", mapKey2);
        mapBig.put("战士", mapKey3);

        //遍历
        Set<Map.Entry<String, Map<String, String>>> entrySet1 = mapBig.entrySet();
        for (Map.Entry<String, Map<String, String>> entry1 : entrySet1) {

            //解析entry对象
            String key1 = entry1.getKey();
            Map<String, String> value1 = entry1.getValue();

            System.out.println("key为【"+key1+"】所对应的值如下:");

            //继续解析嵌套map
            Set<Map.Entry<String, String>> entrySet2 = value1.entrySet();
            for (Map.Entry<String, String> entry2 : entrySet2) {

                //解析entry对象
                String key2 = entry2.getKey();
                String value2 = entry2.getValue();
                System.out.print(key2 + ":" + value2 + "|");
            }
            //换行
            System.out.println();
        }
    }

演示代码运行结果展示:

key为【射手】所对应的值如下:
1:黄忠|2:狄仁杰|3:虞姬|
key为【法师】所对应的值如下:
1:妲己|2:貂蝉|3:甄姬|
key为【战士】所对应的值如下:
1:吕布|2:孙策|3:钟无艳|

        看这,演示代码是不是特比的有意思,其实呢,你可以无限嵌套下去,唯有一点,别把自己绕晕了就行哈,因为我在给大家设置演示实例的同时就考虑到了该问题,当你map嵌套map一层又一层,层数大了,你自己都不知道要嵌套那一层,所以我在演示的时候,我是尽量通过取名123这种阿拉伯数字来取分,还有就是对于每一层map你都要做一次循环。

4、值存放单列集合

        像这种map值是嵌套单列集合,还是相对比较简单,对比嵌套map而言,在实际开发中也是会经常遇到的,但是对于这种map嵌套单列集合的数据结构,相对而言遍历map是简单些,遍历层数相对值为map嵌套也简单些,像HashMap<String,List<String>>,它只需要遍历一层即可打印出对应键所对应的list值。

演示代码如下:

    /**
     * 遍历值为map的list集合
     */
    @Test
    public void testMapForByArrayList() {

        //创建一个map集合容器
        Map<String, List<String>> map = new HashMap<>();

        //定义集合集合。
        List<String> arrayList1 = new ArrayList<>();
        arrayList1.add("黄忠");

        List<String> arrayList2 = new ArrayList<>();
        arrayList2.add("吕布");
        arrayList2.add("钟无艳");

        //添加到集合中
        map.put("射手", arrayList1);
        map.put("法师", arrayList2);

        //遍历map
        Set<Map.Entry<String, List<String>>> entrySet = map.entrySet();
        for (Map.Entry<String, List<String>> entry : entrySet) {

            //解析entry对象
            String key = entry.getKey();
            List<String> value = entry.getValue();

            System.out.println("key为【" + key + "】所对应的值如为:" + value);
        }
    }

演示代码运行结果展示:

key为【射手】所对应的值如为:[黄忠]
key为【法师】所对应的值如为:[吕布, 钟无艳]

完整截图可见如下:

         以上就是对map的一些玩法,你们也可以开大自己的脑洞, 比如像这样,Map<String, List<Map<String,List<String>>>>,再比如这样:Map<String, Map<String,Map<String,List<UserEntity>>>>等,你们可以尽情的无限玩下去,只有你想不到的就没有做不到的,可以吧?空闲时间,大家可以对于我上述提出的这两数据类型的map进行实现一下啊。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。