一个小练习,三层嵌套的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.王五