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);
}
}
}
}