19.2.2 通过实例熟悉数组列表如何存储数据

在举实例之前,先介绍ArrayList类的一些方法函数。

❑ArrayList():这是一个默认构造器,系统默认的初始化容量是10。

❑ArrayList(Collection):构建一个数组列表的对象。这个数组列表中包含集合的所有元素。

❑ArrayList(int initCapcity):构建一个指定初始化容量的数组列表对象。

❑void add(int index, Object element):在指定位置插入指定的元素。

❑boolean add(object o):在数组列表的末尾追加一个新元素。

❑boolean contains(object element):测试指定的数组列表中是否包含有指定的元素element,如果包含该元素则返回true,反之返回false。

❑Int size():返回数组列表中包含元素的数量。

❑void set(int index, object obj):设置数组列表指定位置元素的值,它会覆盖原来的内容。要强调的就是index必须在0~size()-1之间。

❑Object get(int index):得到指定位置存储的元素值。

❑Object remove(int index):删除指定位置的元素。

【实例19.3】下面演示一个有关ArrayList的实例,通过这个实例能更好地理解ArrayList数据结构的用法。实例的流程如图19.7所示。


先设计一个教师类,然后在主运行类中创建教师类的对象和数组列表对象,并将教师类对象装载到数组列表对象中,再在主运行类中创建迭代器对象,用来操作数组列表中的元素。主要代码如下:

19.2.2 通过实例熟悉数组列表如何存储数据 - 图1

图 19.7 数组列表数据结构实例

(1)教师类的设计代码。


01 ///创建一个教师类

02 ///schoolname指学校 名称

03 ///classname指 班级名称

04 ///teachername指老师姓名

05 ///teachercode指老师工号

06 ///teachersexy指 性别

07 ///teacherbirthday指出 生年月

08 ///familyaddress指 家庭地址

09 ///set是设置器

10 ///get是访问器

11 ///tostring方法是使得对象能够以字符串形式输出的方法

12 class teacher{

13 private String schoolname;

14 private String classname;

15 private String teachername;

16 private String teachercode;

17 private String teachersexy;

18 private String teacherbirthday;

19 private String familyaddress;

20 public teacher(String teachername, String teachercode, String teachersexy, String

21 teacherbirthday)

22 {

23 this.teachername=teachername;

24 this.teachercode=teachercode;

25 this.teachersexy=teachersexy;

26 this.teacherbirthday=teacherbirthday;

27 }

28 public String getname()

29 {

30 return teachername;

31 }

32 public String getcode()

33 {

34 return teachercode;

35 }

36 public String getsexy()

37 {

38 return teachersexy;

39 }

40 public String getbirthday()

41 {

42 return teacherbirthday;

43 }

44 public void setschoolname(String schoolname)

45 {

46 this.schoolname=schoolname;

47 }

48 public void setclassname(String classname)

49 {

50 this.classname=classname;

51 }

52 53

public void setfamilyaddress(String familyaddress)

54 {

55 this.familyaddress=familyaddress;

56 }

57 public String getschoolname()

58 {

59 return schoolname;

60 }

61 public String getclassname()

62 {

63 return classname;

64 }

65 public String getfamilyaddress()

66 {

67 return familyaddress;

68 }

69 public String toString()

70 {

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

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

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

74 return infor;

75 }

76 }


(2)主运行类通过数组列表,实现数据的输出。


77 import java.util.ArrayList;

78 ///主运行类

79 ///al是创建的一个数组列表对象

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

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

82 ///add方法是数组列表中添加元素的方法

83 ///remove方法是数组列表中删除元素的方法

84 public class test1

85 {

86 public static void main(String[]args)

87 {

88 ArrayList al=new ArrayList();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

113 teacher t=new teacher("孟凡良","34512","男","1954-09-23");

114 t.setschoolname("成都科技大学");

115 t.setclassname("机械系三班");

116 t.setfamilyaddress("成都市区");

117 //通过设置器赋值给每个对象

118 al.add(t1);//把每个对象添加到数组列表中去

119 al.add(t2);

120 al.add(t3);

121 al.add(t4);

122 al.add(t5);

123 al.add(t6);

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

125 //输出数组列表中的元素个数

126 for(int i=0;i<al.size();i++)

127 {

128 System.out.println((teacher)al.get(i));//输出数组列表中的元素,以字符串形式

129 }

130 System.out.println("对不起,系统出错了!有个教师信息错了,需要改正。");

131 al.set(5,t);

132 System.out.println("经过我们的审核后,教师信息如下:");

133 for(int i=0;i<al.size();i++)

134 {

135 System.out.println((teacher)al.get(i));

136 }

137 al.remove(2);//删除数组列表中的元素

138 al.remove(4);

139 System.out.println("有两个教师辞职了,所以剩下教师信息为:");

140 for(int i=0;i<al.size();i++)

141 {

142 System.out.println((teacher)al.get(i));//输出剩下的数组列表中的元素

143 }

144 }

145 }


【代码说明】第12~76行创建一个teacher类,第88行创建一个ArrayList对象al。第118~123行将创建的teacher对象添加到al中。第133~136行和第140~143行都是输出al中的元素。

【运行效果】


这个小组有6个教师。

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

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

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

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

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

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

对不起,系统出错了!有个教师信息错了,需要改正。经过我们的审核后,教师信息如下:

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

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

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

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

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

学校 名称:成都科技大学 班级名称:机械系三班 教师姓名:孟凡良 教师工号:34512 性别:男出 生年月:1954-09-23 家庭地址:成都市区

有两个教师辞职了,所以剩下教师信息为:

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

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

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

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


以上的实例演示ArrayList数组列表的用法。其实这个实例并不难,先构造几个类,然后为每个类构造对象,最后相互调用。