黑马程序员_日记61_map扩展知识

来源:互联网 发布:网络黄金通缉了多少人 编辑:程序博客网 时间:2024/04/27 22:20

 ——- android培训、java培训、期待与您交流! ———-

map扩展知识。


示例:
学校czbz有多个教室:yurenban,jiuyeban
每个教室有多个学生;
学生有编号和姓名。

“yureban” “01” “zhangsan”;
“yureban” “02” “lisi”;

“jiuyeban” “01” “wangwu”;
“jiuyeban” “02” “zhaoliu”;

一个学校有多个教室。每一个教室都有名称。


分析

map集合被使用是因为具备映射关系。
map集合的特点是一个键对应一个值,不能有重复的键。
但是如果我们想要实现一对多的功能,该怎么做呢?


一 下面首先演示利用一个map集合的嵌套使用来“变相”实现:map集合一对多。

思路:

    //1 创建学校的映射    //2 创建预热班教室的映射    //3 创建就业班教室的映射    //4 在学校中添加映射项    //5 在预热班中添加映射项    //6 在就业班中添加映射项    //7 取出并打印学校所有的映射项    //8 取出并打印教室所有的映射项

二 按照集合面向对象的思路来设计

1 把Id和name存入学生对象—抽象出学生类
2 把学生对象存入学生班级
3 创建学校映射,让班级名称映射班级

实现步骤:

1 设计学生类
2 创建学校映射
3 建立班级名称和班级的映射关系
4 把学生对象添加到学生班级
5 迭代取出学生班级和学生

注意:

ArrayList:底层的数据结构使用的是数组结构。
所以既不可以用Comparable排序也不可以用Comparator排序。
要排序的话,就得利用数组的排序方法。


import java.util.*;public class MapAdvancedDemo{    //sop打印    public static void sop(Object obj)    {        System.out.println(obj);    }    //主函数    public static void main(String[] args)    {        //一 map嵌套实现一对多        //mapAdvancedDemo();        //二 map和List综合实现        mapListDemo();    }    //一 只使用map嵌套来实现    public static void mapAdvancedDemo()    {        //1 创建学校的映射        TreeMap<String,TreeMap<String,String>> school = new TreeMap<String,TreeMap<String,String>>();        //2 创建预热班教室的映射        TreeMap<String,String> preClass = new TreeMap<String,String>();         //3 创建就业班教室的映射        TreeMap<String,String> jobClass = new TreeMap<String,String>();        //4 在学校中添加映射项        school.put("preClass",preClass);        school.put("jobClass",jobClass);        //5 在预热班中添加映射项        preClass.put("pc001","Jack");        preClass.put("pc004","Bob");        preClass.put("pc002","Alice");        preClass.put("pc003","Mike");        //6 在就业班中添加映射项        jobClass.put("jc001","Tom");        jobClass.put("jc003","Selina");        jobClass.put("jc004","David");        jobClass.put("jc002","Jimmy");        //7 取出并打印学校所有的映射项        //7.1 先取出所有键存入Set,再利用迭代取出键,并获取值        for(Iterator<String> it= school.keySet().iterator(); it.hasNext(); )        {            //* 迭代获取教室名称            String className = it.next();            //** 获取教室             TreeMap<String,String> classroom = school.get(className);            //*** 打印教室名称            sop(className);        //8 取出并打印教室所有的映射项            //8.1 先取出所有映射项存入Map.Entry,再迭代取出映射项,获取键和值            for(Iterator<Map.Entry<String,String>> iter = classroom.entrySet().iterator(); iter.hasNext(); )            {                //*    迭代取出教室映射项                Map.Entry<String,String> me = iter.next();                //**   获取学生编号                String id = me.getKey();                //***  获取学生姓名                String name = me.getValue();                //**** 打印学生编号和学生姓名                sop(id+"....."+name);            }        }    }    //二 按照集合面向对象的思路来设计    public static void mapListDemo()    {        //1 创建学校映射        TreeMap<String,List<Student>> school = new TreeMap<String,List<Student>>();        //2 创建预热班        List<Student> preClass = new ArrayList<Student>();        //3 创建就业班        List<Student> jobClass = new ArrayList<Student>();        //4 建立学生班级名称和学生班级的映射关系        school.put("预热班",preClass);        school.put("就业班",jobClass);        //5 预热班添加学生        preClass.add(new Student("pc001","Jack"));        preClass.add(new Student("pc004","Bob"));        preClass.add(new Student("pc002","Jakie"));        preClass.add(new Student("pc003","Mike"));        //6 就业班添加学生        jobClass.add(new Student("jc001","Alice"));        jobClass.add(new Student("jc002","Lily"));        jobClass.add(new Student("jc003","Tom"));        jobClass.add(new Student("jc004","David"));        //迭代取出并打印学校班级和学生信息        getInfor(school);    }    //第二种思路最后一步:迭代取出并打印学校班级和学生信息    public static void getInfor(TreeMap<String,List<Student>> school)    {        //7 迭代取出并打印班级名称        for(Iterator<String> it = school.keySet().iterator(); it.hasNext(); )        {            //获取班级名称            String className = it.next();            //获取班级            List<Student> classroom = school.get(className);            //打印班级名称            sop(className);        //8 迭代取出并打印学生            for(Iterator<Student> iter = classroom.iterator(); iter.hasNext(); )            {                //获取学生                Student stu = iter.next();                //打印学生                sop(stu.toString());            }        }           }}//学生类class Student {    private String id;//学生编号    private String name;//学生姓名    Student(String id ,String name)//构造函数初始化    {        this.id = id;        this.name = name;    }    public void setId(String id)    {        this.id = id;    }    public String getId()    {        return id;    }    public void setName(String name)    {        this.name = name;    }    public String getName()    {        return name;    }    //覆盖hashCode    public int hashCode()    {        return id.hashCode()+name.hashCode()*3;    }    //覆盖equals方法    public boolean equals(Object obj)    {        if(!(obj instanceof Student))            throw new ClassCastException("不能转换为Student");        //强制转换        Student stu = (Student)obj;        //Id相同则判定为同一个人        return this.getId().equals(stu.getId());    }    public String toString()//覆盖toString    {        return id+"..."+name;    }}

map和List的综合运用

map和List的综合运用

Map嵌套运用

Map嵌套运用

0 0
原创粉丝点击