(75)Map拓展练习:二层映射该如何取内层的值
public class Demo2 {
public static void main(String[] args) {
HashMap<String,HashMap> school=new HashMap<String,HashMap>();
HashMap<String,String> yure=new HashMap<String,String>();
HashMap<String,String> jiuye=new HashMap<String,String>();
//本来这三个集合没有关系,但是通过下面两句,将学校和预热班、就业班联系在了一起
school.put("yuren",yure);
school.put("jiuye",jiuye);
yure.put("一班","zhangsan");
yure.put("二班","lisi");
jiuye.put("一班", "wangwu");
jiuye.put("二班", "zhaoliu");
//get(jiuye);
//获取学校下面直属的两个层次:yuren、jiuye,再调用get方法,得到就业班的子班级和姓名。即获取最内层的元素
Set<String> s=school.keySet();
Iterator<String> it=s.iterator();
while(it.hasNext()) {
String roomName=it.next();
HashMap<String,String> room=school.get(roomName);//得到yure的集合
// System.out.println(roomName);
get(room);
}
}
//给yure或者jiuye输出所有对应的班级、学生:例如参数:就业班 输出就业班的所有学生信息
public static void get(HashMap<String,String> roomMap) {
Set<String> s=roomMap.keySet();
Iterator<String> it=s.iterator();
while(it.hasNext()) {
String id=it.next();
System.out.println("班级:"+id+" 姓名:"+roomMap.get(id));
}
System.out.println("-----------");
}
}
在实际开发中,学生一般封装成类,但是上面的外层映射、内层映射,通过外层映射怎样输出内层映射的值,可以好好看下。
下面对学生封装成对象进行演示:
public class Student implements Comparable<Student>{
private int classes;
private String name;
public int getClasses() {
return classes;
}
public String getName() {
return name;
}
Student(int classes,String name){
this.classes=classes;
this.name=name;
}
public String toString() {
return classes+"---"+name;
}
//哈希地址:以班级作为第一关键字
public int hashCode() {
return classes;
}
//姓名为第二关键字
public boolean equals (Object obj) {
if(!(obj instanceof Student))
throw new ClassCastException("类型转换异常");
Student stu=(Student)obj;
if( this.name.equals(stu.name)&&this.classes==stu.classes)
return true;
return false;
}
//二叉树使用·姓名第一关键字,班级第二关键字
public int compareTo(Student stu) {
int num=this.name.compareTo(stu.name);
if(num==0) {
return new Integer(this.classes).compareTo(stu.classes);
}
return num;
}
}
public class Demo {
public static void main(String[] args) {
HashMap<String,HashSet> school=new HashMap<String,HashSet>();
HashSet<Student> yure=new HashSet<Student>();
HashSet<Student> jiuye=new HashSet<Student>();
school.put("yure", yure);
school.put("jiuye", jiuye);
yure.add(new Student(1,"zhangsan"));
yure.add(new Student(2,"lisi"));
yure.add(new Student(1,"zhang"));
jiuye.add(new Student(1,"wangwu"));
jiuye.add(new Student(2,"zhaoliu "));
//get(yure);
get_1(school,"yure");
//给学校名称school,要查看yure班学生的成员
}
public static void get(HashSet<Student> hs)
{
Iterator<Student> it=hs.iterator();
while(it.hasNext()) {
Student stu=it.next();
System.out.println("班级:"+stu.getClasses()+" 姓名:"+stu.getName());
}
}
//给学校名称school,要查看yure班学生的成员
public static void get_1(HashMap<String,HashSet> map,String room) {
Set<String > s=map.keySet();
Iterator<String> it=s.iterator();
while(it.hasNext()) {
String roomName=it.next();
System.out.println(roomName);
HashSet<Student> stu=map.get(room);
get(stu);
break;//注意这里要写break,否则在school中有多少个元素,就输出几次
}
}
}