19.6.2 通过实例熟悉映像如何存储数据

【实例19.9】本小节将通过实例,学习如何通过映像存储和操作数据。树映像实例的流程如图19.11所示。


程序先设计一个教师类,然后,在主运行类中创建教师类的对象和树映像对象。并将教师类对象装载到树映像对象中,再在主运行类中操作树映像中的元素。实例创建步骤如下:

19.6.2 通过实例熟悉映像如何存储数据 - 图1

图 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 家庭地址:重庆沙坪坝]

这些教师今天都离开了,所有教师信息都可以删除了!这里把教师信息都删除了。


在运行结果中,输出的所有数据都是按姓名排序的数据。

注意 树映像的排序是按照关键字来排序的,与值无关,这一点与树集不一样。