双列集合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的嵌套遍历的更多相关文章

  1. 双列集合Map

    1.双列集合Map,就是存储key-value的键值对. 2.hashMap中键必须唯一,值可以不唯一. 3.主要方法:put添加数据    getKey---通过key获取数据    keySet- ...

  2. (10)集合之双列集合Map,HashMap,TreeMap

    Map中的元素是两个对象,一个对象作为键,一个对象作为值.键不可以重复,但是值可以重复. 看顶层共性方法找子类特有对象. Map与Collection在集合框架中属并列存在 Map存储的是键值对 Ma ...

  3. Day 9:双列集合Map及实现该接口的类的常用方法

    为什么要学双列集合? 因为单列集合无法处理映射关系,会有成对出现的数据 Map接口  如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复 Map接 ...

  4. 双列集合Map相关面试题

    一.了解Map集合吗?Map集合都有哪些实现 HashMap HashTable LinkedHashMap TreeMap ConcurrentHashMap 二.HashMap和HashTable ...

  5. 双列集合Map接口 & Collections工具类

    HashMap 常用方法 遍历方式 iterator迭代器  ITIT HashTable 继承字典 Hashtable--Properties 文件读写 总结 Collections工具类

  6. Map集合(双列集合)

    Map集合(双列集合)Map集合是键值对集合. 它的元素是由两个值组成的,元素的格式是:key=value. Map集合形式:{key1=value1 , key2=value2 , key3=val ...

  7. Java之Map接口(双列集合)

    Map集合概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...

  8. Map集合——双列集合

    双列集合<k, v> Map: Map 和 HashMap是无序的: LinkedHashMap是有序的: HashMap & LinkedHashMap: put方法: 其中,可 ...

  9. HashMap -双列集合的遍历与常用的方法

    package cn.learn.Map; /* java.util.Hashtable<k,y> implements Map<k,v> 早期双列集合,jdk1.0开始 同步 ...

随机推荐

  1. Android 的Recovery机制

    Android 的Recovery机制 文件夹 1. 系统的启动模式 1 1.1 Android系统的启动模式 1 1.2 系统的启动模式 2 2. Recovery模式中的三个部分 3 3. Rec ...

  2. m_Orchestrate learning system---十一、thinkphp查看临时文件的好处是什么

    m_Orchestrate learning system---十一.thinkphp查看临时文件的好处是什么 一.总结 一句话总结:可以知道thinkphp的标签被smarty引擎翻译而来的php代 ...

  3. [jzoj 6086] [GDOI2019模拟2019.3.26] 动态半平面交 解题报告 (set+线段树)

    题目链接: https://jzoj.net/senior/#main/show/6086 题目: 题解: 一群数字的最小公倍数就是对它们质因数集合中的每个质因数的指数取$max$然后相乘 这样的子树 ...

  4. [bzoj 1398] Vijos1382寻找主人 Necklace 解题报告(最小表示法)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1398 题目: Description 给定两个项链的表示,判断他们是否可能是一条项链. ...

  5. cell的重用

    cell的重用 简单来说,就是为了节省内存,系统通过一个重用的表示进行获取重用的控件 1 定义重用的标识 NSString * reuseId = @"hero"  //这里的he ...

  6. JavaScript实现记住密码功能

    用js实现记住密码功能,但是前端记住密码不安全,最好还是不要用.我感觉这个记住密码应该是通过与后台建立一个会话来实现. 这个效果的测试地址在:http://ofoyou.com/blog/rePass ...

  7. 记我安装Caffe的血泪史(2)

    不知不觉居然花了一个星期来安装Caffe...真是醉了. 接上一篇blog,本以为编译完cuda,opencv之后问题就差不多了(其实本来是没有什么问题的,但硬是被我搞了一堆事情出来....) 出于对 ...

  8. ZOJ 2883 Shopaholic【贪心】

    解题思路:给出n件物品,每买三件,折扣为这三件里面最便宜的那一件即将n件物品的价值按降序排序,依次选择a[3],a[6],a[9]----a[3*k] Shopaholic Time Limit: 2 ...

  9. double int 类型的区别

    内部组织格式不同: po [NSString stringWithFormat:@"%d", f] 107886912 (lldb) po [NSString stringWith ...

  10. LRU算法与LRUCache

    关于LRU LRU(Least recently used,最近最少使用)算法是操作系统中一种经典的页面置换算法,当发生缺页中断时,需要将内存的一个或几个页面置换出,LRU指出应该将内存最近最少使用的 ...