双列集合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. ios+openflow 问题

    环境:xcode5.1+ios7.1 需求:A试图 的scroll加入 B视图:[A addSubview:B.view] 问题: 1.B视图载入到A视图上了,但Openflow的图片未载入.后经调试 ...

  2. MySQL超级简明基本操作攻略,给自己看(一)

    系统:Ubuntu 14.04 LTS 安装: apt-get install mysql //安装数据库 apt-get install mysql-workbench //安装图形界面 使用: 启 ...

  3. 1.future线程通信

    #include <future> #include<iostream> #include <thread> #include <thread> #in ...

  4. 采集电脑摄像头和mic,rtp端口推送音视频工具

    介绍:这个是我在做一个rtmp播放的项目中自己写的rtp推送的工具,可选择摄像头,可选择推送rtp的端口和ip 下载地址: github:https://github.com/alexhegang/s ...

  5. 记一次"未将对象引用设置到对象的实例"问题的排查过程

    最近在给一个老项目做数据对接接口. 背景一 该项目最后更新日期为2006年,使用ASP.NET WebForm..Net2.0.OJB.Castle Avtive Record等.由于是某集团的子系统 ...

  6. jQuery学习(八)——使用JQ插件validation进行表单校验

    1.官网下载:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ 目录结构: 2.引入jquery库和validation插件 ...

  7. 一个PHPer如何深入学习ES搜索引擎?

    公司早在一年前就上ES作为后端搜索服务的项目 ,我们PHPer只是负责实现业务接口,es的一些查询,优化技巧由另一组同事(JAVAer)负责,有时,一个需求过来,改动较大时,需要更改查询json语句, ...

  8. Uncaught TypeError: undefined is not a function

    index.html <script src="resources/sap-ui-core.js" id="sap-ui-bootstrap" data- ...

  9. c#学习0217

    1 继承 继承 1 子类是否继承了父类的构造函数 答案:子类并没有继承父类的构造函数 但是子类或默认调用父类的无参数的构造函数 在子类中创建父类对象 这样子类才可以使用父类的成员 如果在父类中声明了有 ...

  10. bzoj4551 [HEOI2016]树

    题目描述 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均 ...