ArrayList集合&学生管理系统
# 1. ArrayList
# 1.1 ArrayList类概述
什么是集合
提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
ArrayList集合的特点
底层是数组实现的,长度可以变化
集合和数组的区别
- 共同点:都是存储数据的容器
- 不同点:数组的容量是固定的,集合的容量是可变的
泛型
概念:泛型
是用于约束集合中存储元素的数据类型 使用:在出现E的地方我们使用引用数据类型替换即可
JDK11不允许在泛型中使用基本数据类型,需要转换为对应的类/引用数据类型
基本数据类型 引用数据类型 byte Byte short Short char Character int Integer float Float double Double boolean Boolean 举例:ArrayList
, ArrayList
ArrayList的使用格式
JDK1.7后支持推导,后面的尖括号中内容可以省略。
ArrayList<E> list = new ArrayList<>();
1
# 1.2 ArrayList类的常用方法
# 1.2.1 构造方法
方法名 | 说明 |
---|---|
public ArrayList() | 创建一个空的集合对象 |
# 1.2.2 成员方法
方法名 | 说明 |
---|---|
public boolean remove(Object o) | 删除【第一次出现的】指定的元素,返回删除是否成功 |
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public E set(int index, E element) | 修改指定索引处的元素,返回被修改的元素 |
public int size() | 返回集合中的元素的个数 |
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
# 1.2.3 示例代码
import java.util.ArrayList;
public class ArrayListDemo1 {
public static void main(String[] args) {
//创建集合
ArrayList<String> array = new ArrayList<String>();
//添加元素
array.add("hello");
array.add("world");
array.add("java");
//public void add(int index, E element): 在此集合中指定位置插入指定元素
array.add(1, "JavaSE");
//IndexOutOfBoundsException
array.add(5, "JavaEE");
//public boolean remove(Object o): 删除指定的元素,返回删除是否成功
//System.out.println(array.remove("world"));
//System.out.println(array.remove("javaee"));
//public E remove(int index): 删除指定索引处的元素,返回被删除的元素
//System.out.println(array.remove(1));
//IndexOutOfBoundsException
//System.out.println(array.remove(3));
//public E set(int index, E element): 修改指定索引处的元素,返回被修改的元素
//System.out.println(array.set(1, "javaee"));
//IndexOutOfBoundsException
//System.out.println(array.set(3, "javaee"));
//public E get(int index): 返回指定索引处的元素
//System.out.println(array.get(0));
//System.out.println(array.get(1));
//System.out.println(array.get(2));
//System.out.println(array.get(3));
//public int size(): 返回集合中元素的个数
System.out.println(array.size());
//输出集合
System.out.println("array:" + array);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 1.3 删除ArrayList中的所有指定元素
# 1.3.1 案例需求
删除ArrayList中所有指定元素
# 1.3.2 代码实现1
import java.util.ArrayList;
/*
目标:掌握集合中如何删除元素
E remove(int index) 删除该列表中指定位置的元素
boolean remove(Object o) 从列表中删除第一次出现的指定元素(如果存在)
*/
public class ArrayListDemo5 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("a");
list.add("a");
list.add("a");
while (list.remove("a")) {
list.remove("a");
}
System.out.println("list = " + list);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1.3.3 代码实现2
import java.util.ArrayList;
/*
目标:掌握集合中如何删除元素
E remove(int index) 删除该列表中指定位置的元素
boolean remove(Object o) 从列表中删除第一次出现的指定元素(如果存在)
*/
public class ArrayListDemo5 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("a");
list.add("a");
list.add("a");
for (int i = list.size() - 1; i >= 0; i--) {
String s = list.get(i);
if (s.equals("a")) {
list.remove(i);
}
}
System.out.println("list = " + list);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 1.4 ArrayList存储字符串并遍历
# 1.4.1 案例需求
创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合
# 1.4.2 实现步骤
- 创建集合对象
- 往集合中添加字符串对象
- 遍历集合,首先要能够获取到集合中的每一个元素,这个通过get(int index)方法实现
- 遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
- 遍历集合的通用格式
# 1.4.3 代码实现
import java.util.ArrayList;
/*
思路:
1:创建集合对象
2:往集合中添加字符串对象
3:遍历集合,首先要能够获取到集合中的每一个元素,这个通过get(int index)方法实现
4:遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
5:遍历集合的通用格式
*/
public class ArrayListDemo2 {
public static void main(String[] args) {
//创建集合对象
ArrayList<String> array = new ArrayList<String>();
//往集合中添加字符串对象
array.add("刘正风");
array.add("左冷禅");
array.add("风清扬");
//遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
System.out.println(array.size());
//遍历集合的通用格式
for (int i = 0; i < array.size(); i++) {
String s = array.get(i);
System.out.println(s);
}
//直接输出
System.out.println(array.toString());
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 1.5 ArrayList存储学生对象并遍历
# 1.5.1 案例需求
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
# 1.5.2 实现步骤
- 定义学生类
- 创建集合对象
- 创建学生对象
- 添加学生对象到集合中
- 遍历集合,采用通用遍历格式实现
# 1.5.3 代码实现
学生类:
public class Student {
//成员变量
private String name;
private int age;
//构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//set方法
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
//get方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
主类:
/*
思路:
1:定义学生类
2:创建集合对象
3:创建学生对象
4:添加学生对象到集合中
5:遍历集合,采用通用遍历格式实现
*/
public class ArrayListDemo3 {
public static void main(String[] args) {
//创建集合对象
ArrayList<Student> array = new ArrayList<>();
//创建学生对象
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("张曼玉", 25);
Student s3 = new Student("星子", 18);
//添加学生对象到集合中
array.add(s1);
array.add(s2);
array.add(s3);
//遍历集合,采用通用遍历格式实现
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1.6 键盘录入学生信息到集合
# 1.6.1 案例需求
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
学生的姓名和年龄来自于键盘录入
# 1.6.2 实现步骤
- 定义学生类,为了键盘录入数据方便,把学生类中的成员变量都定义为String类型
- 创建集合对象
- 键盘录入学生对象所需要的数据
- 创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
- 往集合中添加学生对象
- 遍历集合,采用通用遍历格式实现
# 1.6.3 代码实现
学生类:
public class Student {
//成员变量
private String name;
private int age;
//构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//set方法
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
//get方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
主类:
import java.util.ArrayList;
import java.util.Scanner;
/*
思路:
1:定义学生类,为了键盘录入数据方便,把学生类中的成员变量都定义为String类型
2:创建集合对象
3:键盘录入学生对象所需要的数据
4:创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
5:往集合中添加学生对象
6:遍历集合,采用通用遍历格式实现
*/
public class ArrayListDemo4 {
public static void main(String[] args) {
//创建集合对象
ArrayList<Student> array = new ArrayList<Student>();
//为了提高代码的复用性,我们用方法来改进程序
addStudent(array);
addStudent(array);
addStudent(array);
//遍历集合,采用通用遍历格式实现
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
public static void addStudent(ArrayList<Student> array) {
//键盘录入学生对象所需要的数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.nextLine();
System.out.println("请输入学生年龄");
int age = sc.nextInt();
//创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
Student s = new Student();
s.setName(name);
s.setAge(age);
//往集合中添加学生对象
array.add(s);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 2. 学生管理系统
# 2.1 学生管理系统实现步骤
# 2.1.1 案例需求
针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:
- 添加学生:通过键盘录入学生信息,添加到集合中
- 删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
- 修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
- 查看学生:将集合中的学生对象信息进行展示
- 退出系统:结束程序
# 2.1.2 实现步骤
定义学生类,包含以下成员变量
private String sid //学生id
private String name //学生姓名
private String age //学生年龄
private String address //学生所在地
private String birthday //学生生日
包含以下成员方法:
- 无参构造
- 带五个参数的构造方法
- 每个成员变量对应给出get/set方法
学生管理系统主界面的搭建步骤
2.1 用输出语句完成主界面的编写
2.2 用Scanner实现键盘录入数据
2.3 用switch语句完成操作的选择
2.4 用循环完成再次回到主界面
学生管理系统的添加学生功能实现步骤
3.1 用键盘录入选择添加学生
3.2 定义一个方法,用于添加学生
显示提示信息,提示要输入何种信息
键盘录入学生对象所需要的数据
创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
将学生对象添加到集合中(保存)
给出添加成功提示
3.3 调用方法
学生管理系统的查看学生功能实现步骤
4.1 用键盘录入选择查看所有学生信息
4.2 定义一个方法,用于查看学生信息
显示表头信息
将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
4.3 调用方法
学生管理系统的删除学生功能实现步骤
5.1 用键盘录入选择删除学生信息
5.2 定义一个方法,用于删除学生信息
- 显示提示信息
- 键盘录入要删除的学生学号
- 调用getIndex方法,查找该学号在集合的索引
- 如果索引为-1,提示信息不存在
- 如果索引不是-1,调用remove方法删除并提示删除成功
5.3 调用方法
学生管理系统的修改学生功能实现步骤
6.1 用键盘录入选择修改学生信息
6.2 定义一个方法,用于修改学生信息
- 显示提示信息
- 键盘录入要修改的学生学号
- 调用getIndex方法,查找该学号在集合的索引
- 如果索引为-1,提示信息不存在
- 如果索引不是-1,键盘录入要修改的学生信息
- 集合修改对应的学生信息
- 给出修改成功提示
6.3 调用方法
退出系统
使用System.exit(0);退出JVM
# 2.2 学生类的定义
package StudentManger;
public class Student {
private String sid; //学号
private String name; //姓名
private String age; //年龄
private String address; //居住地
private String birthday; //生日
public Student(){
}
public Student(String sid, String name, String age, String address, String birthday) {
this.sid = sid;
this.name = name;
this.age = age;
this.address = address;
this.birthday = birthday;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 2.3 测试类的定义
package StudentManger;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManager {
/*
1 用输出语句完成主界面的编写
2 用Scanner实现键盘录入数据
3 用switch语句完成操作的选择
4 用循环完成再次回到主界面
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//创建集合对象,用于保存学生的数据信息
ArrayList<Student> array = new ArrayList<Student>();
while (true) {
//用输出语句完成主界面的编写
System.out.println("----------欢迎来到学生管理系统------------");
System.out.println("1 添加学生");
System.out.println("2 删除学生");
System.out.println("3 修改学生");
System.out.println("4 查看所有学生");
System.out.println("5 退出");
System.out.println("请输入你的选择");
//用Scanner实现键盘录入数据
String choice = sc.nextLine();
switch (choice) {
case "1":
addStudent(array);
break;
case "2":
deleteStudent(array);
break;
case "3":
updateStudent(array);
break;
case "4":
findAllStudent(array);
break;
case "5":
System.out.println("谢谢使用");
//JVM退出
System.exit(0);
default:
System.out.println("你输入的信息有误,请重新输入。");
}
}
}
public static void addStudent(ArrayList<Student> array) {
//显示提示信息,提示要输入何种信息,键盘录入学生对象所需要的数据
Scanner sc = new Scanner(System.in);
String sid;
while (true) {
System.out.println("请输入学生学号");
sid = sc.nextLine();
boolean flag = isUsed(array, sid);
if (flag) {
System.out.println("你输入的学号已被占用,请重新输入");
} else {
break;
}
}
System.out.println("请输入学生姓名");
String name = sc.nextLine();
System.out.println("请输入学生年龄");
String age = sc.nextLine();
System.out.println("请输入学生居住地");
String address = sc.nextLine();
System.out.println("请输入学生生日");
String birthday = sc.nextLine();
//创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
Student s = new Student(sid, name, age, address, birthday);
//将学生对象添加到集合中保存
array.add(s);
//给出添加成功提示
System.out.println("添加成功");
}
//定义一个方法,判断学号是否被使用
public static boolean isUsed(ArrayList<Student> array, String sid) {
//如果sid与集合中某一个学生的学号相同,返回true;如果都不相同,返回false
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
if (s.getSid().equals(sid)) {
return true;
}
}
return false;
}
//定义一个方法,用于查看学生信息
public static void findAllStudent(ArrayList<Student> array) {
//判断集合中是否有数据,如果没有显示提示信息
if (array.size() == 0) {
System.out.println("无信息,请先添加信息再查询");
//为了让程序不再往下查询,在这里写上return
return;
}
//显示表头信息
// "\t"是一个tab键的位置
System.out.println("学号\t\t姓名\t\t年龄\t居住地\t生日");
//将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getSid() + "\t\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getAddress() + "\t" + s.getBirthday());
}
}
//定义一个方法,用于删除学生信息
public static void deleteStudent(ArrayList<Student> array) {
//显示提示信息,键盘输入要删除的学生的学号
System.out.println("请输入你要删除的学生的学号");
//在删除学生操作前,判断学号是否存在。如果不存在,显示提示信息;如果存在,执行删除操作
int index = getIndex(array);
if (index == -1) {
//返回主菜单
return;
} else {
array.remove(index);
//给出删除成功的提示
System.out.println("删除学生成功");
}
}
//定义一个方法,用于修改学生信息
public static void updateStudent(ArrayList<Student> array) {
Scanner sc = new Scanner(System.in);
//显示提示信息
System.out.println("请输入你要修改的学生的学号");
//在删除学生操作前,判断学号是否存在。如果不存在,显示提示信息;如果存在,执行删除操作
int index = getIndex(array);
if (index == -1) {
//返回主菜单
return;
} else {
//键盘录入要修改的学生信息
System.out.println("请输入要修改的学生的信息");
System.out.println("1. 姓名");
System.out.println("2. 年龄");
System.out.println("3. 居住地");
System.out.println("4. 生日");
String choice = sc.nextLine();
//创建新的学生对象
Student s = new Student();
switch (choice) {
case "1":
System.out.println("请输入学生修改后的姓名:");
String name = sc.nextLine();
//封装为新的学生对象,学号为原学号
s = new Student(array.get(index).getSid(), name, array.get(index).getAge(), array.get(index).getAddress(), array.get(index).getBirthday());
break;
case "2":
System.out.println("请输入学生修改后的年龄:");
String age = sc.nextLine();
//封装为新的学生对象,学号为原学号
s = new Student(array.get(index).getSid(), array.get(index).getName(), age, array.get(index).getAddress(), array.get(index).getBirthday());
break;
case "3":
System.out.println("请输入学生修改后的居住地:");
String address = sc.nextLine();
//封装为新的学生对象,学号为原学号
s = new Student(array.get(index).getSid(), array.get(index).getName(), array.get(index).getAge(), address, array.get(index).getBirthday());
break;
case "4":
System.out.println("请输入学生的新生日:");
String birthday = sc.nextLine();
//封装为新的学生对象,学号为原学号
s = new Student(array.get(index).getSid(), array.get(index).getName(), array.get(index).getAge(), array.get(index).getAddress(), birthday);
break;
default:
System.out.println("你输入的信息有误,请重新输入");
}
//调用集合的set方法,完成修改
array.set(index, s);
System.out.println("修改成功");
}
}
//定义一个方法,判断要删除/查找的学号是否存在
public static int getIndex(ArrayList<Student> array) {
//键盘输入学号
Scanner sc = new Scanner(System.in);
//先假设传入的学号在集合中不存在
int index = -1;
//遍历集合查找
while (index == -1) {
String sid = sc.nextLine();
//当用户输入0时返回主方法,在这里返回-1
if (sid.equals("0")) {
return -1;
} else {
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
if (s.getSid().equals(sid)) {
//用index变量存储正确的索引位置
index = i;
return index;
}
}
//学号不存在,提示重新输入,返回主菜单输入0
System.out.println("该学号不存在,请重新输入。返回主菜单请输入0");
}
}
return index;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230