(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中有多少个元素,就输出几次

         }
    }

}
posted @ 2017-07-18 21:04  测试开发分享站  阅读(127)  评论(0编辑  收藏  举报