19.5.2 通过实例熟悉树集如何存储数据
【实例19.8】本节将通过实例,熟悉树集在数据存储方面的作用。下面看一个有关树集的实例。实例流程如图19.10所示。
先设计一个教师类,然后,在主运行类中创建教师类的对象和树集对象,并将教师类对象装载到树集对象中,再在主运行类中操作树集中的元素。这里还是使用迭代器,因为树集中的元素像链表或数组列表一样,都继承Collection类。实例步骤如下:
图 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 家庭地址:重庆沙坪坝
这些教师今天都离职了,所有教师信息都可以删除了!这里把教师信息都删除了。
从这个程序的运行结果来看,输出的数据都经过排序,这也是树集的一大特点。