一、教学目标
- 能够使用HashMap集合实现值为双列集合存放。
- 能够使用HashMap集合实现值为单列集合存放。
- 能够使用HashMap集合实现值为基本数据类型存放。
- 能够使用HashMap集合实现值为对象存放。
二、HashMap实现自定义元素存放
3、值存放双列集合
对于值又存放map?map嵌套呀这是,像这种需求,在日常实战中也不是不会遇到,比如定义一个HashMap<String,Map<String,String>>,如果日常中遇到这种类型的map,你们会不会感到空幻,这也太可怕了吧。
演示代码如下:
/*** 遍历值为map的map集合*/@Testpublic void testMapForByMap() {//创建一个map集合容器Map<String, Map<String, String>> mapBig = new HashMap<>();//分别创建值mapMap<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+"】所对应的值如下:");//继续解析嵌套mapSet<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集合*/@Testpublic 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);//遍历mapSet<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进行实现一下啊。