19.5.2 通过实例熟悉树集如何存储数据

【实例19.8】本节将通过实例,熟悉树集在数据存储方面的作用。下面看一个有关树集的实例。实例流程如图19.10所示。


先设计一个教师类,然后,在主运行类中创建教师类的对象和树集对象,并将教师类对象装载到树集对象中,再在主运行类中操作树集中的元素。这里还是使用迭代器,因为树集中的元素像链表或数组列表一样,都继承Collection类。实例步骤如下:

19.5.2 通过实例熟悉树集如何存储数据 - 图1

图 19.10 树集数据结构实例

(1)设计教师类,代码如下所示。


01 import java.util.TreeSet;

02 import java.util.Iterator;

03 ///创建一个教师类并且实现了Comparable接口

04 ///schoolname指学校 名称

05 ///classname指 班级名称

06 ///teachername指老师姓名

07 ///teachercode指老师工号

08 ///teachersexy指 性别

09 ///teacherbirthday指出 生年月

10 ///familyaddress指 家庭地址

11 ///set是设置器

12 ///get是访问器

13 ///compareTo方法是用来按照某个字段进行排序的方法

14 class teacher implements Comparable

15 {

16 private String schoolname;

17 private String classname;

18 private String teachername;

19 private int teachercode;

20 private String teachersexy;

21 private String teacherbirthday;

22 private String familyaddress;

23 public teacher(String teachername, int teachercode, String teachersexy, String

24 teacherbirthday)

25 {

26 this.teachername=teachername;

27 this.teachercode=teachercode;

28 this.teachersexy=teachersexy;

29 this.teacherbirthday=teacherbirthday;

30 }

31 public int compareTo(Object o)

32 {

33 teacher t=(teacher)o;

34 return(t.teachercode-teachercode);

35 36

}

37 public String getname()

38 {

39 return teachername;

40 }

41 public int getcode()

42 {

43 return teachercode;

44 }

45 public String getsexy()

46 {

47 return teachersexy;

48 }

49 public String getbirthday()

50 {

51 return teacherbirthday;

52 }

53 public void setschoolname(String schoolname)

54 {

55 this.schoolname=schoolname;

56 }

57 public void setclassname(String classname)

58 {

59 this.classname=classname;

60 }

61 62

public void setfamilyaddress(String familyaddress)

63 {

64 this.familyaddress=familyaddress;

65 }

66 public String getschoolname()

67 {

68 return schoolname;

69 }

70 public String getclassname()

71 {

72 return classname;

73 }

74 public String getfamilyaddress()

75 {

76 return familyaddress;

77 }

78 public String toString()

79 {

80 String infor="学校 名称:"+schoolname+""+" 班级名称:"+classname+""+" 教师姓名:

81"+teachername+""+" 教师工号:"+teachercode+""+" 性别:"+teachersexy+""+"出 生年月:

82"+teacherbirthday+""+" 家庭地址:"+familyaddress;

83 return infor;

84 }

85 }


(2)在主运行类中,通过迭代器对象和树集对象来操作数据。代码如下所示。


86 ///主运行类

87 ///ts是创建的一个树集对象

88 ///t1至t6是针对教师类创建出来的六个对象

89 ///set设置器赋值给这六个对象

90 ///add方法是树集中添加元素的方法

91 ///remove方法是树集中删除元素的方法

92 ///it是迭代器对象,用来在数据结构中确定元素位置

93 public class test6

94 {

95 public static void main(String[]args)

96 {

97 TreeSet ts=new TreeSet();//创建一个树集对象

98 teacher t1=new teacher("赵浩",1234011,"男","1981-01-02");

99 teacher t2=new teacher("黎平",1234002,"男","1982-08-09");

100 teacher t3=new teacher("王鹏",1234033,"男","1982-11-22");

101 teacher t4=new teacher("宋波",1234014,"女","1982-11-02");

102 teacher t5=new teacher("章伟",1234025,"男","1980-01-12");

103 teacher t6=new teacher("孙君",1234016,"女","1981-09-22");

104 t1.setschoolname("重庆大学");

105 t1.setclassname("计算机三班");

106 t1.setfamilyaddress("重庆沙坪坝");

107 t2.setschoolname("重庆大学");

108 t2.setclassname("计算机三班");

109 t2.setfamilyaddress("重庆沙坪坝");

110 t3.setschoolname("重庆大学");

111 t3.setclassname("计算机三班");

112 t3.setfamilyaddress("重庆沙坪坝");

113 t4.setschoolname("重庆大学");

114 t4.setclassname("计算机三班");

115 t4.setfamilyaddress("重庆沙坪坝");

116 t5.setschoolname("重庆大学");

117 t5.setclassname("计算机三班");

118 t5.setfamilyaddress("重庆沙坪坝");

119 t6.setschoolname("重庆大学");

120 t6.setclassname("计算机三班");

121 t6.setfamilyaddress("重庆沙坪坝");

122 //通过设置器赋值给对象

123 ts.add(t1);//将对象添加到树集中

124 ts.add(t2);

125 ts.add(t3);

126 ts.add(t4);

127 ts.add(t5);

128 ts.add(t6);

129 System.out.println("这个小组有"+ts.size()+"个教师。");

130 //输出树集中元素个数

131 Iterator it=ts.iterator();//创建一个迭代器

132 while(it.hasNext())

133 {

134 System.out.println(it.next());

135 }

136 ts.remove(t3);//删除树集中元素

137 ts.remove(t4);

138 System.out.println("由于有些教师离开了学校,经过我们的审核后,教师信息如下:");

139 Iterator it1=ts.iterator();

140 while(it1.hasNext())

141 {

142 System.out.println(it1.next());

143 }

144 System.out.println("这些教师今天都离职了,所有教师信息都可以删除了!");

145 ts.remove(t1);//删除树集中元素

146 ts.remove(t2);

147 ts.remove(t5);

148 ts.remove(t6);

149 if(ts.isEmpty())

150 {

151 System.out.println("这里把教师信息都删除了。");

152 }

153 else

154 {

155 System.out.println("系统报错了!");

156 }

157 }

158 }


【代码说明】第97行创建一个数集对象ts,第98~121行创建教师对象,并设置教师对象的属性值。第123~128行将教师对象添加到树集中。第131~135行创建迭代器并输出树集中的元素。

【运行效果】


这个小组有6个教师。

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:王鹏 教师工号:1234033 性别:男出 生年月:1982-11-22 家庭地址:重庆沙坪坝

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:章伟 教师工号:1234025 性别:男出 生年月:1980-01-12 家庭地址:重庆沙坪坝

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:孙君 教师工号:1234016 性别:女出 生年月:1981-09-22 家庭地址:重庆沙坪坝

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:宋波 教师工号:1234014 性别:女出 生年月:1982-11-02 家庭地址:重庆沙坪坝

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:赵浩 教师工号:1234011 性别:男出 生年月:1981-01-02 家庭地址:重庆沙坪坝

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:黎平 教师工号:1234002 性别:男出 生年月:1982-08-09 家庭地址:重庆沙坪坝

由于有些教师离开了学校,经过我们的审核后,教师信息如下:

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:章伟 教师工号:1234025 性别:男出 生年月:1980-01-12 家庭地址:重庆沙坪坝

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:孙君 教师工号:1234016 性别:女出 生年月:1981-09-22 家庭地址:重庆沙坪坝

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:赵浩 教师工号:1234011 性别:男出 生年月:1981-01-02 家庭地址:重庆沙坪坝

学校 名称:重庆大学 班级名称:计算机三班 教师姓名:黎平 教师工号:1234002 性别:男出 生年月:1982-08-09 家庭地址:重庆沙坪坝

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


从这个程序的运行结果来看,输出的数据都经过排序,这也是树集的一大特点。