Map集合嵌套

Map集合嵌套

package Test_01;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/*Map集合嵌套
 *   Map集合中存储的还是Map集合
 *   要求:Map集合名--传智播客机构
 *                基础班 --Map集合名--javase -------------Map<学号,姓名>
 *                              001号  刘德华
 *                              002号   李晨
 *                就业班--Map集合名--javaee--------------Map<学号,姓名>
 *                              001号  范冰冰
 *                              002号  柳岩
 *  
 *    
 **/
public class Map_MAP {
	public static void main(String[] args) {
		// 【1】先定义集合(3个--基础班、就业班、传智播客机构)
		Map<String, String> javase = new HashMap<String, String>();
		Map<String, String> javaee = new HashMap<String, String>();
		Map<String, Map<String, String>> czbk = new HashMap<String, Map<String, String>>();
		// 存储元素
		javaee.put("001号", "刘德华");
		javaee.put("002号", "李晨");

		javase.put("001号", "范冰冰");
		javase.put("002号", "柳岩");

		czbk.put("基础班", javase); // 注意:这里的v值是个Map集合,所以只需要把这个集合的名字名字给传进去
		czbk.put("就业班", javaee);

		// 调用方法
		keySet(czbk);
		entrySet(czbk);
	}

	// 【2】遍历
	/*
	 * 方式一:键找值 Map集合方法: keySet():让 set集合得到Map集合中所有的键
	 * get(key):通过指定的键,从map集合中找对应的值
	 */
	// 此方法传参数--因为遍历的是传智播客机构这个Map集合,参数 (eg:Person p\ int a)
	public static void keySet(Map<String, Map<String, String>> czbk) {
		// 遍历从外Map往里Map遍历
		// ----1.通过Map集合的keySet()方法--借助Set集合存储Map集合中所有的键
		// ---- 外czbk调用keySet()方法,把键存储在set集合中
		Set<String> classnameSet = czbk.keySet();// 此时想清楚czbk.keySet()返回的是键,那么键又是啥?是字符串=班级名字--把键存储在set集合中
		// ----2.遍历set集合,获取出集合集合中的所有元素(Map中的键)
		Iterator<String> classnameit = classnameSet.iterator();
		while (classnameit.hasNext()) {
			String classnameKey = classnameit.next();
			Map<String, String> classMap = czbk.get(classnameKey);// 通过键返回的值是?是一个班级Map集合:基础班<姓名、年龄>
			// 外Map遍历完,继续遍历里边Map--外Map的值=班级再次作为键
			Set<String> classnum = classMap.keySet();// 把里边Map的键存储到set集合
			Iterator<String> classnumit = classnum.iterator();
			while (classnumit.hasNext()) {
				String xuehao = classnumit.next();
				String name = classMap.get(xuehao);
				System.out.println(classnameKey + "=" + xuehao + "=" + name);
				
			}

		}
		System.out.println("=============keySet方法=========entrySet方法==============");
	}

	public static void entrySet(Map<String, Map<String, String>> czbk) {
		/*
		 * Map集合 遍历方式2: 通过键值对,找键,找值 的方式 Map集合中的方法:
		 * entrySet()--此方法返回Map集合中所有的键值对(Entry)对象,以set集合形式返回
		 * --也就是说此方法把<键值对>的“映射关系=Entry”装在Set集合中 --也就是说此方法把<夫 妻>的“
		 * 结婚证=Entry”装在Set集合中
		 */
		// ---1.通过Map集合的entry()方法--借助Set集合存储Map集合中所有键值对的“映射关系”的对象
		// --也就是说此方法把<键值对>的“映射关系=Entry”装在Set集合中

		Set<Map.Entry<String, Map<String, String>>> classnameSet = czbk
				.entrySet();
		// ---2.遍历set集合,获取出集合中所有的元素(Map集合中的键值对的”映射关系“对象---"俗话对象就是说多个结婚证")
		// 迭代器、while
		Iterator<Map.Entry<String, Map<String, String>>> classnameit = classnameSet
				.iterator();
		while (classnameit.hasNext()) {
			// classnameit.next()方法,取出的的是czbk-Map集合的键值对"关系对象"
			Map.Entry<String, Map<String, String>> classnameEntry = classnameit.next();
			// 既然获取到了键值对,那么通过接口Map.Entry<k,v>中的俩个方法:getKey()获取键、getValue()获取值
			String classnameKey = classnameEntry.getKey();
			Map<String, String> classMap = classnameEntry.getValue();// 获取到的值是个Map集合
			// 此时继续调用班级集合classMap的方法entrySet(),把键值对(学号、姓名)存储到set集合
			Set<Map.Entry<String, String>> studentSet = classMap.entrySet();
			// 迭代set集合
			Iterator<Map.Entry<String, String>> studentit = studentSet.iterator();
		    while(studentit.hasNext()){
		    	Map.Entry<String, String> studentEntry=studentit.next();
		    	// 既然获取到了键值对,那么通过接口Map.Entry<k,v>中的俩个方法:getKey()获取键、getValue()获取值
		    String xuehao= studentEntry.getKey();
		    String name= studentEntry.getValue();
		    System.out.println(classnameKey + "=" + xuehao + "=" + name);
		    }
		
		}
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41573718/article/details/88728191