黑马程序员_日记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嵌套运用
0 0
- 黑马程序员_日记61_map扩展知识
- 黑马程序员_日记56_Map概述和简单方法
- 黑马程序员_日记57_Map如何取出所有键值
- 黑马程序员_集合(二)_Map
- 黑马程序员_集合(二)_Map
- 黑马程序员_Java语言_集合_Map
- 黑马程序员Java知识回顾之集合_map
- 黑马程序员_Map类
- 黑马程序员_map集合
- 黑马程序员_Map概述
- 黑马程序员_Map集合
- 黑马程序员_Map集合
- 黑马程序员_Map集合
- 黑马程序员_Map集合
- 黑马程序员_Map
- 黑马程序员_Map
- 黑马程序员_Map
- 黑马程序员_Map集合
- 第五周项目四友元函数
- 浮点数在内存中的表示
- Git教程:从远程库克隆
- /etc目录的根目录下的文件作用
- Java学习笔记(3) 界面设计、项目搭建
- 黑马程序员_日记61_map扩展知识
- Git教程:分支管理
- Git学习笔记(九)---常用命令
- 第三章第十七题
- 动态生成表格 - javascript
- Git教程:创建与合并分支
- UVa 11214 Guarding the Chessboard
- 在VS2010下c++与Sqlite3的连接
- PHP介绍