一个小练习,三层嵌套的HashMap,分别使用set和entry的两种方法遍历,取值。
demo
package map;
import java.util.*;
/*
* 集合的嵌套练习
* 关系模型:学院<专业<宿舍<学号,姓名>>>
*
* 外层:学院<专业名称,专业集合>
* 中层:专业<宿舍名称,宿舍集合>
* 内层:宿舍<学号,姓名>
* 元素:学生
*/
public class HashMapDemo1 {
public static void main(String[] args) {
//软件学院的一个集合
Map<String,HashMap<String,HashMap<String,String>>> rjxy = new HashMap<String, HashMap<String,HashMap<String,String>>>();
//申请两个专业的集合
HashMap<String, HashMap<String,String>> rg = new HashMap<String, HashMap<String,String>>();
HashMap<String, HashMap<String,String>> xa = new HashMap<String, HashMap<String,String>>();
//添加两个专业的集合到大集合中
rjxy.put("软件工程", rg);
rjxy.put("信息安全", xa);
//申请四个宿舍的集合
HashMap<String, String> c506 = new HashMap<String, String>();
HashMap<String, String> c507 = new HashMap<String, String>();
HashMap<String, String> b508 = new HashMap<String, String>();
HashMap<String, String> b509 = new HashMap<String, String>();
//添加四个宿舍到两个专业中去
rg.put("楸苑三栋b508", b508);
rg.put("楸苑三栋b509", b509);
xa.put("楸苑三栋c506", c506);
xa.put("楸苑三栋c507", c507);
//添加学生到宿舍里面去
b508.put("20131120001", "张三");
b508.put("20131120002", "李四");
b509.put("20131120003", "王五");
b509.put("20131120004", "赵六");
c506.put("20131120010", "马七");
c506.put("20131120011", "冯九");
c507.put("20131120012", "刘十");
c507.put("20131120013", "孙百");
keySet(rjxy);
System.out.println("------------------分割线----------------------");
entry(rjxy);
}
//第一种,keySet进行遍历
public static void keySet(Map<String,HashMap<String,HashMap<String,String>>> rjxy){
//返回专业名字的set集合
Set<String> zykey = rjxy.keySet();
Iterator<String> it = zykey.iterator();
while(it.hasNext()){
//专业名字
String zhuanyename = it.next();
//利用专业名字,从大集合里面获取专业集合
HashMap<String, HashMap<String, String>> sushe = rjxy.get(zhuanyename);
//返回宿舍号的set集合
Set<String> sskey = sushe.keySet();
Iterator<String> sushehao = sskey.iterator();
while(sushehao.hasNext()){
//宿舍号
String sushenum = sushehao.next();
//利用宿舍号码,返回宿舍集合
HashMap<String,String> xuesheng = sushe.get(sushenum);
//获取宿舍集合内的学生学号的set集合
Set<String> xskey = xuesheng.keySet();
Iterator<String> xuehao = xskey.iterator();
while(xuehao.hasNext()){
//获取学号
String xuehaonum = xuehao.next();
//获取姓名
String name = xuesheng.get(xuehaonum);
//输出全部信息
System.out.println(zhuanyename + "." + sushenum + "." + xuehaonum + "." + name);
}
}
}
}
/*
* entry遍历,顺便使用增强for循环
*/
public static void entry(Map<String,HashMap<String,HashMap<String,String>>> rjxy){
//定义专业名字和专业map映射关系对象的set集合
Set<Map.Entry<String,HashMap<String,HashMap<String,String>>>> zhuanyeset = rjxy.entrySet();
//增强for循环,每次获取到专业名称和专业集合的entry关系对象
for( Map.Entry<String,HashMap<String,HashMap<String,String>>> zhuanyeentry : zhuanyeset){
//获取key,也就是专业名称
String zhuanyeName = zhuanyeentry.getKey();
//获取value,也就是宿舍的map集合
HashMap<String,HashMap<String,String>> sushehm = zhuanyeentry.getValue();
//利用宿舍的HashMap集合返回宿舍号和宿舍集合对应关系对象的集合
Set<Map.Entry<String, HashMap<String,String>>> susheSet = sushehm.entrySet();
//增强for循环,每次获取到宿舍号的宿舍HashMap集合的关系对象
for(Map.Entry<String, HashMap<String, String>> susheEntry : susheSet){
//获取key,拿到宿舍号
String susheNum = susheEntry.getKey();
//获取value,拿到宿舍的HashMap集合
HashMap<String,String> xueshenghm = susheEntry.getValue();
//获取学号和姓名的对应关系对象的集合
Set<Map.Entry<String, String>> xueshengSet = xueshenghm.entrySet();
//增强for循环,每次获取到学号的姓名的对象关系对象
for(Map.Entry<String, String> xueshengEntry : xueshengSet){
//获取key,也就是学号
String xuehao = xueshengEntry.getKey();
//获取value,也就是学生的名字
String name = xueshengEntry.getValue();
System.out.println(zhuanyeName + "." + susheNum + "." + xuehao + "." + name);
}
}
}
}
}
程序的输出结果如下:
信息安全.楸苑三栋c506.20131120011.冯九
信息安全.楸苑三栋c506.20131120010.马七
信息安全.楸苑三栋c507.20131120012.刘十
信息安全.楸苑三栋c507.20131120013.孙百
软件工程.楸苑三栋b508.20131120001.张三
软件工程.楸苑三栋b508.20131120002.李四
软件工程.楸苑三栋b509.20131120004.赵六
软件工程.楸苑三栋b509.20131120003.王五
------------------分割线----------------------
信息安全.楸苑三栋c506.20131120011.冯九
信息安全.楸苑三栋c506.20131120010.马七
信息安全.楸苑三栋c507.20131120012.刘十
信息安全.楸苑三栋c507.20131120013.孙百
软件工程.楸苑三栋b508.20131120001.张三
软件工程.楸苑三栋b508.20131120002.李四
软件工程.楸苑三栋b509.20131120004.赵六
软件工程.楸苑三栋b509.20131120003.王五