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

246 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

哈喽,各位小伙伴们好,我是喵手。

       今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学 习,互相学习,才能成长的更快,对吧。

       我是一名java开发,所以日常接触到最多的就是java啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!

一、前言

       论前几期啊,我们是分别讲了Object类Date类FormDate类Calendar类System类StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。

       今天,我就要给大家讲讲一个双列集合-map。很多期内容,有小伙伴给我留言,说跟着我学,一般要看完文章才知道这一期讲了什么,所以,每一期,我都会先总结教学目标,而这期的教学目标如下:

  • 能够使用HashMap集合实现值为双列集合存放。

  • 能够使用HashMap集合实现值为单列集合存放。

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

  • 能够使用HashMap集合实现值为对象存放。

那我们就开始今天这期的教学内容啦,你们可得好好听好好学啊。

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

1、值存放双列集合

       对于值又存放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你都要做一次循环。

2、值存放单列集合

       像这种map值是嵌套单列集合,还是相对比较简单,对比嵌套map而言,在实际开发中也是会经常遇到的,但是对于这种map嵌套单列集合的数据结构,相对而言遍历map是简单些,遍历层数相对值为map嵌套也简单些,像HashMap<String,List>,它只需要遍历一层即可打印出对应键所对应的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>>>,再比如这样:Map<String, Map<String,Map<String,List>>>等,你们可以尽情的无限玩下去,只有你想不到的就没有做不到的,可以吧?空闲时间,大家可以对于我上述提出的这两数据类型的map进行实现一下啊。

       综上,以上两期分别带着大家实战了一遍map集合练习,从实现map存放值为双列集合到存放值为对象再到存放值为嵌套map等,这一切,都模拟了在日常开发过程中会经常遇到的数据结构。有时候前端人员给到的数据结构是非常的稀有刁钻,但是我们往往不要怕,没有什么是map实现不了的,所以我才这么着重带着大家联系这各种map值的类型存储及map遍历,目的就是为了大家能更快的掌握。

... ...

       好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。

三、文末

       教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

-------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

-------------------------------------------