19.6.2 通过实例熟悉映像如何存储数据
【实例19.9】本小节将通过实例,学习如何通过映像存储和操作数据。树映像实例的流程如图19.11所示。
程序先设计一个教师类,然后,在主运行类中创建教师类的对象和树映像对象。并将教师类对象装载到树映像对象中,再在主运行类中操作树映像中的元素。实例创建步骤如下:
图 19.11 树映像数据结构实例
(1)设计教师类,代码如下所示。
01 ///创建一个教师类对象并且实现了Comparable接口,用来排序
02 ///通过设置器设置了学校 名称、 班级名称、 教师姓名、工号、 性别、出 生年月、 家庭地址
03 class teacher
04 {
05 private String schoolname;
06 private String classname;
07 private String teachername;
08 private int teachercode;
09 private String teachersexy;
10 private String teacherbirthday;
11 private String familyaddress;
12 public teacher(String teachername, int teachercode, String teachersexy, String
13 teacherbirthday)
14 {
15 this.teachername=teachername;
16 this.teachercode=teachercode;
17 this.teachersexy=teachersexy;
18 this.teacherbirthday=teacherbirthday;
19 }
20 21
public String getname()
22 {
23 return teachername;
24 }
25 public int getcode()
26 {
27 return teachercode;
28 }
29 public String getsexy()
30 {
31 return teachersexy;
32 }
33 public String getbirthday()
34 {
35 return teacherbirthday;
36 }
37 public void setschoolname(String schoolname)
38 {
39 this.schoolname=schoolname;
40 }
41 public void setclassname(String classname)
42 {
43 this.classname=classname;
44 }
45 46
public void setfamilyaddress(String familyaddress)
47 {
48 this.familyaddress=familyaddress;
49 }
50 public String getschoolname()
51 {
52 return schoolname;
53 }
54 public String getclassname()
55 {
56 return classname;
57 }
58 public String getfamilyaddress()
59 {
60 return familyaddress;
61 }
62 public String toString()
63 {
64 String infor="学校 名称:"+schoolname+""+" 班级名称:"+classname+""+" 教师姓名:
65"+teachername+""+" 教师工号:"+teachercode+""+" 性别:"+teachersexy+""+"出 生年月:
66"+teacherbirthday+""+" 家庭地址:"+familyaddress;
67 return infor;
68 }
69 }
(2)在主运行类中,通过树映像操作数据,详细代码如下所示。
70 import java.util.TreeMap;
71 ///主运行类
72 ///tm是创建的一个树映像对象
73 ///t1至t6是针对教师类创建出来的六个对象
74 ///set设置器赋值给这六个对象
75 ///put方法是树映像中添加元素的方法
76 ///remove方法是树映像中删除元素的方法
77 public class test7
78 {
79 public static void main(String[]args)
80 {
81 TreeMap tm=new TreeMap();//创建一个树映像对象
82 teacher t1=new teacher("赵浩",1234011,"男","1981-01-02");
83 teacher t2=new teacher("黎平",1234002,"男","1982-08-09");
84 teacher t3=new teacher("王鹏",1234033,"男","1982-11-22");
85 teacher t4=new teacher("宋波",1234014,"女","1982-11-02");
86 teacher t5=new teacher("章伟",1234025,"男","1980-01-12");
87 teacher t6=new teacher("孙君",1234016,"女","1981-09-22");
88 t1.setschoolname("重庆大学");
89 t1.setclassname("计算机三班");
90 t1.setfamilyaddress("重庆沙坪坝");
91 t2.setschoolname("重庆大学");
92 t2.setclassname("计算机三班");
93 t2.setfamilyaddress("重庆沙坪坝");
94 t3.setschoolname("重庆大学");
95 t3.setclassname("计算机三班");
96 t3.setfamilyaddress("重庆沙坪坝");
97 t4.setschoolname("重庆大学");
98 t4.setclassname("计算机三班");
99 t4.setfamilyaddress("重庆沙坪坝");
100 t5.setschoolname("重庆大学");
101 t5.setclassname("计算机三班");
102 t5.setfamilyaddress("重庆沙坪坝");
103 t6.setschoolname("重庆大学");
104 t6.setclassname("计算机三班");
105 t6.setfamilyaddress("重庆沙坪坝");
106 //通过设置器赋值给对象
107 tm.put("zh",t1);//添加对象到树映像
108 tm.put("lp",t2);
109 tm.put("wp",t3);
110 tm.put("sb",t4);
111 tm.put("zw",t5);
112 tm.put("sj",t6);
113 System.out.println("这个小组有"+tm.size()+"个教师。");
114 System.out.println(tm.values());
115 tm.remove("lp");//删除树映像中的元素
116 tm.remove("sb");
117 System.out.println("帮我查找一下有没有孙君这个教师");
118 if(tm.containsKey("sj"))
119 {
120 System.out.println("这个教师是存在的,他的信息如下:");
121 System.out.println((teacher)tm.get("sj"));
122 }
123 else
124 {
125 System.out.println("这里没有这个教师。");
126 }
127 System.out.println("由于有些教师离开了学校,经过我们的审核后,教师信息如下:");
128 System.out.println(tm.values());
129 System.out.println("这些教师今天都离开了,所有教师信息都可以删除了!");
130 tm.remove("zh");
131 tm.remove("sj");
132 tm.remove("zw");
133 tm.remove("wp");
134 if(tm.isEmpty())
135 {
136 System.out.println("这里把教师信息都删除了。");
137 }
138 else
139 {
140 System.out.println("系统报错了!");
141 }
142 }
143 }
【代码说明】第81行创建树映像对象tm,第107~112行添加对象到tm中,第113行中的tm.size()方法获取树映像对象的元素个数。第114行tm.values()方法输出树映像对象的所有元素。这里没有使用到迭代器,因为树映像中的元素是无序的。
【运行效果】
这个小组有6个教师。
[学校 名称:重庆大学 班级名称:计算机三班 教师姓名:黎平 教师工号:1234002 性别:男出 生年月:1982-08-09 家庭地址:重庆沙坪坝,学校 名称:重庆大学 班级名称:计算机三班 教师姓名:宋波 教师工号:1234014 性别:女出 生年月:1982-11-02 家庭地址:重庆沙坪坝,学校 名称:重庆大学 班级名称:计算机三班 教师姓名:孙君
教师工号:1234016 性别:女出 生年月:1981-09-22 家庭地址:重庆沙坪坝,学校名
称:重庆大学 班级名称:计算机三班 教师姓名:王鹏 教师工号:1234033 性别:男出 生年月:1982-11-22 家庭地址:重庆沙坪坝,学校 名称:重庆大学 班级名称:计算机三班 教师姓名:赵浩 教师工号:1234011 性别:男出 生年月:1981-01-02 家庭地址:重庆沙坪坝,学校 名称:重庆大学 班级名称:计算机三班 教师姓名:章伟教师
工号:1234025 性别:男出 生年月:1980-01-12 家庭地址:重庆沙坪坝]帮我查找一下有没有孙君这个教师
这个教师是存在的,他的信息如下:
学校 名称:重庆大学 班级名称:计算机三班 教师姓名:孙君 教师工号:1234016 性别:女出 生年月:1981-09-22 家庭地址:重庆沙坪坝
由于有些教师离开了学校,经过我们的审核后,教师信息如下:
[学校 名称:重庆大学 班级名称:计算机三班 教师姓名:孙君 教师工号:1234016 性别:女出 生年月:1981-09-22 家庭地址:重庆沙坪坝,学校 名称:重庆大学 班级名称:计算机三班 教师姓名:王鹏 教师工号:1234033 性别:男出 生年月:1982-11-22 家庭地址:重庆沙坪坝,学校 名称:重庆大学 班级名称:计算机三班 教师姓名:赵浩
教师工号:1234011 性别:男出 生年月:1981-01-02 家庭地址:重庆沙坪坝,学校名
称:重庆大学 班级名称:计算机三班 教师姓名:章伟 教师工号:1234025 性别:男出 生年月:1980-01-12 家庭地址:重庆沙坪坝]
这些教师今天都离开了,所有教师信息都可以删除了!这里把教师信息都删除了。
在运行结果中,输出的所有数据都是按姓名排序的数据。
注意 树映像的排序是按照关键字来排序的,与值无关,这一点与树集不一样。