双列集合Map的嵌套遍历
双列集合Map的嵌套使用,例如HashMap中还有一个HashMap,这样的集合遍历起来稍微有点儿复杂。例如一个集合:HashMap<Integer,HashMap<String,Integer>> hm = new HashMap<>(),可以先把内层的HashMap看成一个整体,做完外层遍历之后再对内层遍历。
还是结合一个例子来说明Map集合的嵌套使用究竟是什么样子。例如一个年级有两个班,一个文科班和一个理科班,编号分别为A班和B班,两个班中又分别有学生,用HashMap来存储学生的姓名和年龄。可以先把两个班级的编号和对应信息存储在一个HashMap中,再用另一个HashMap来存储对应班级中的学生信息。
如:HashMap<Character,HashMap<String,Integer>>,接下来看看代码的实现。
import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class HashMapDemo {
public static void main(String[] args) {
// 创建外层HashMap来存储班级信息和学生,理科班用A作为键,文科班用B作为键,类型用Character。
HashMap<Character, HashMap<String, Integer>> outHashMap = new HashMap<>();
// 创建两个班级的学生信息,姓名用String,年龄用Integer类型存储。
// 注意:集合中不能存储基本数据类型,这是集合区别于数组的特点之一。
HashMap<String, Integer> inHashMap1 = new HashMap<>();
HashMap<String, Integer> inHashMap2 = new HashMap<>();
inHashMap1.put("赵飞燕", 17);
inHashMap1.put("钱多多", 20);
inHashMap1.put("孙小可", 19);
inHashMap2.put("张可辛", 21);
inHashMap2.put("胡一刀", 21);
inHashMap2.put("王八蛋", 18);
// 把学生信息加到外层集合中。
outHashMap.put('A', inHashMap1);
outHashMap.put('B', inHashMap2);
// 开始遍历,先完成外层遍历。
//方式一
// 获取外层集合键集合set1。
Set<Character> set1 = outHashMap.keySet();
for (Character ch : set1) {
System.out.println(ch + "班");
// 通过多层集合的键获取内层存储学生信息的集合对象。
HashMap<String, Integer> inHashMap = outHashMap.get(ch);
// 获取内层存储学生信息集合的键的集合
Set<String> set2 = inHashMap.keySet();
for (String key : set2) {
System.out.println("\t" + key + ":" + inHashMap.get(key));
}
}
//方式二
//获取外层键值对对象的集合
Set<Map.Entry<Character, HashMap<String, Integer>>> outSet = outHashMap.entrySet();
for (Map.Entry<Character, HashMap<String, Integer>> keyEntry : outSet) {
System.out.println(keyEntry.getKey() + "班");
//获取内层键值对对象的集合
Set<Map.Entry<String, Integer>> inSet = keyEntry.getValue().entrySet();
for (Map.Entry<String, Integer> key : inSet) {
System.out.println("\t" + key.getKey() + ":" + key.getValue());
}
}
}
}
通过上面的例子可以看出:集合Map的嵌套不管用哪种方式遍历,思想是一致的,都是先从外层依次向内层遍历,但是二者也有不同的地方。
方式一是先获取外层集合的键的集合,通过遍历键时再获取该键对应的值,而内层也是一样,同样先获取内层集合键的集合,再依次取出键所对应的值达到遍历的目的。
方式二是把键和值看作一个整体,先取到整个键值对对象的集合,再通过该键值对对象的getKey()和getValue()方法来分别获取该键值对对象的键和值。内层也是同样的原理。
遍历嵌套双列集合时,一定要把握好每一步操作的对象,不要弄混淆,保持清楚的思路很重要,这样即使有多层嵌套也没有问题。
双列集合Map的嵌套遍历的更多相关文章
- 双列集合Map
1.双列集合Map,就是存储key-value的键值对. 2.hashMap中键必须唯一,值可以不唯一. 3.主要方法:put添加数据 getKey---通过key获取数据 keySet- ...
- (10)集合之双列集合Map,HashMap,TreeMap
Map中的元素是两个对象,一个对象作为键,一个对象作为值.键不可以重复,但是值可以重复. 看顶层共性方法找子类特有对象. Map与Collection在集合框架中属并列存在 Map存储的是键值对 Ma ...
- Day 9:双列集合Map及实现该接口的类的常用方法
为什么要学双列集合? 因为单列集合无法处理映射关系,会有成对出现的数据 Map接口 如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复 Map接 ...
- 双列集合Map相关面试题
一.了解Map集合吗?Map集合都有哪些实现 HashMap HashTable LinkedHashMap TreeMap ConcurrentHashMap 二.HashMap和HashTable ...
- 双列集合Map接口 & Collections工具类
HashMap 常用方法 遍历方式 iterator迭代器 ITIT HashTable 继承字典 Hashtable--Properties 文件读写 总结 Collections工具类
- Map集合(双列集合)
Map集合(双列集合)Map集合是键值对集合. 它的元素是由两个值组成的,元素的格式是:key=value. Map集合形式:{key1=value1 , key2=value2 , key3=val ...
- Java之Map接口(双列集合)
Map集合概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...
- Map集合——双列集合
双列集合<k, v> Map: Map 和 HashMap是无序的: LinkedHashMap是有序的: HashMap & LinkedHashMap: put方法: 其中,可 ...
- HashMap -双列集合的遍历与常用的方法
package cn.learn.Map; /* java.util.Hashtable<k,y> implements Map<k,v> 早期双列集合,jdk1.0开始 同步 ...
随机推荐
- 1)Win10-UWA开发 UWP应用操作方法、Windows 10应用程序的指南
孙广东 2015.8.22 全部任务类型(比方在列表中显示数据或创建导航窗格)的说明和代码演示样例. 在这一节 包含例如以下: 主题 描写叙述 Accessibility 创建通用的Windows ...
- sql server2008对字符串日期字段分区
近期对公司产品的日志数据库做了一个数据分区,数据库使用的是sql server 2008,这里给大家提供一个參考. 须要特别说明的是,非常多网上的样例分区字段都使用的是时间类型的.而这里因为时间字段原 ...
- Linux操作系统是如何工作的
<实验五——Linux操作系统是如何工作的?破解操作系统的奥秘> 姓名:方超 学号:SA12**6201 Linux操作系统工作的基础 存储程序计算机.堆栈(函数调用堆栈)机制和中断机制是 ...
- nyoj--236--心急的C小加(动态规划&&LIS)
心急的C小加 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间 ...
- Java中如何使用线程
首先了解线程的状态转换图: 在Java中一个类要当做线程来使用有两种方法: 1)继承Thread类,并重写run函数 2)实现Runnable接口,并重写run函数 Java是单继承的,但某些情况下一 ...
- Ubuntu系统下Import cv2提示no modules ...错误
最近利用pycharm在Ubuntu系统下调试一个Python项目,将pycharm的解释器从python2.7更换到python3.4后,程序中的Import cv2提示no modules nam ...
- idea运行提示Error:java:无效的源发行版:1.9
如果你是jdk1.8 改到8即可,如图:
- NOIp2018模拟赛四十四
加量不加价?! 昨晚看时间变成了3.5h以为终于变成了正常难度,结果还是国家集训队作业... A题看起来很神仙,B题看上去很神仙,C题一看就知道很神仙: 结果发现B是假题,放榜后发现A也是假题,C是Y ...
- virtualbox挂载目录失败mount: unknown filesystem type ‘vboxsf’
转自[https://blog.csdn.net/u011486871/article/details/79443375] [有小修改] 错误提示:Vagrant was unable to moun ...
- Vim配置及使用
Vim配置 1.打开~/.vimrc,将以下内容考入文件.vimrc中 "行号" set nu "高亮" syntax enable syntax on &qu ...