ArrayList
ArrayList
目录
1 ArrayList
集合和数组的区别 :
共同点:都是存储数据的容器
不同点:数组的容量是固定的,集合的容量是可变的
1.1 ArrayList 的构造方法和添加方法
方法 | 描述 |
---|---|
public ArrayList() |
创建一个空的集合对象 |
public boolean add(E e) |
将指定的元素追加到此集合的末尾 |
public void add(int index,E element) |
在此集合中的指定位置插入指定的元素 |
ArrayList<E> |
是一种特殊的数据类型,泛型。使用引用数据类型替换即可,表示该ArrayList 所支持的数据类型 |
public boolean remove(Object o) |
删除指定的元素,返回删除是否成功 |
public E remove(int index) |
删除指定索引处的元素,返回被删除的元素 |
public E set(int index,E element) |
修改指定索引处的元素,返回被修改的元素 |
public E get(int index) |
返回指定索引处的元素 |
public int size() |
返回集合中的元素的个数 |
1.2 ArrayList 存储字符串并遍历
案例需求 :
创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合
实现代码 :
package com.fcarey.ArrayList;
import java.util.ArrayList;
public class ArrayList01 {
public static void main(String[] args) {
// 创建集合对象
ArrayList<String> list = new ArrayList<String>();
// 往集合中添加字符串对象
list.add("A");
list.add("B");
list.add("C");
// 遍历集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
1.3 ArrayList 存储学生对象并遍历
案例需求 :
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
**实现步骤 : **
1:定义学生类
2:创建集合对象
3:创建学生对象
4:添加学生对象到集合中
5:遍历集合,采用通用遍历格式实现
代码实现 :
/*
思路:
1:定义学生类
2:创建集合对象
3:创建学生对象
4:添加学生对象到集合中
5:遍历集合,采用通用遍历格式实现
*/
public class ArrayListTest02 {
public static void main(String[] args) {
//创建集合对象
ArrayList<Student> array = new ArrayList<>();
//创建学生对象
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("风清扬", 33);
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 综合练习
2.1 学生管理系统实现步骤
案例需求 :
- 针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:
- 添加学生:通过键盘录入学生信息,添加到集合中
- 删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
- 修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
- 查看学生:将集合中的学生对象信息进行展示
- 退出系统:结束程序
实现步骤 :
- 定义学生类
- 学号:String sid
- 姓名:String name
- 年龄:Int age
- 生日:String birthday
- 构造方法:
- 无参构造
- 带四个参数的构造成员方法
- 每个成员变量对应给出
get/set
方法
- 学生管理系统主界面的搭建步骤
- 用输出语句完成主界面的编写
- 用Scanner实现键盘录入数据
- 用switch语句完成操作的选择
- 用循环完成再次回到主界面
- 添加学生功能实现步骤
- 用键盘录入选择添加学生
- 定义一个方法,用于添加学生
- 显示提示信息,提示要输入何种信息
- 键盘录入学生对象所需要的数据
- 创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
- 将学生对象添加到集合中(保存)
- 给出添加成功提示
- 调用方法
- 查看学生功能实现步骤
- 用键盘录入选择查看所有学生信息
- 定义一个方法,用于查看学生信息
- 显示表头信息
- 将集合中数据取出按照对应格式显示学生信息
- 删除学生功能实现步骤
- 用键盘录入选择删除学生信息
- 定义一个方法,用于删除学生信息
- 显示提示信息
- 键盘录入要删除的学生学号
- 调用getIndex方法,查找该学号在集合的索引
- 如果索引为-1,提示信息不存在
- 如果索引不是-1,调用remove方法删除并提示删除成功
- 调用方法
- 修改学生功能实现步骤
- 用键盘录入选择修改学生信息
- 定义一个方法,用于修改学生信息
- 显示提示信息
- 键盘录入要修改的学生学号
- 调用getIndex方法,查找该学号在集合的索引
- 如果索引为-1,提示信息不存在
- 如果索引不是-1,键盘录入要修改的学生信息
- 集合修改对应的学生信息
- 给出修改成功提示
- 调用方法
- 退出系统
return
退出系统
2.2 学生类的定义
package com.fcarey.ArrayList;
public class Student {
private String sid;
private String name;
private int age;
private String birthday;
public void Student() {
}
public Student(String sid, String name,int age, String birthday) {
this.sid = sid;
this.name = name;
this.age = age;
this.birthday = birthday;
System.out.println(name + ":" + age);
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
2.3 ArrayList02类的定义
package com.fcarey.ArrayList;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayList02 {
public static void main(String[] args) {
// 创建集合容器对象
ArrayList<Student> studentArrayList = new ArrayList<>();
while (true) {
System.out.println("--------欢迎来到学生管理系统--------\n" +
"\t1 添加学生\n" +
"\t2 删除学生\n" +
"\t3 修改学生\n" +
"\t4 查看学生\n" +
"\t5 退出\n" +
"\t请输入您的选择:");
String choice = (new Scanner(System.in)).nextLine();
switch (choice) {
case "1":
addStudent(studentArrayList);
// switch 需要使用 break 语句跳出;
break;
case "2":
removeStudent(studentArrayList);
break;
case "3":
updateStudent(studentArrayList);
break;
case "4":
searchStudent(studentArrayList);
break;
case "5":
// return 是结束整个脚本运行。
return;
}
}
}
// void 表示该方法无返回值。
private static void searchStudent(ArrayList<Student> studentArrayList) {
System.out.println("请输入要修改的学生ID");
String sid = (new Scanner(System.in)).nextLine();
if (studentArrayList.isEmpty()) {
System.out.println("当前无学生信息,请添加。");
}
if (getPosition(studentArrayList, sid) != -1) {
System.out.println("学生信息" +
"\n\t学号: " + studentArrayList.get(getPosition(studentArrayList, sid)).getSid() +
"\n\t姓名: " + studentArrayList.get(getPosition(studentArrayList, sid)).getName() +
"\n\t年龄: " + studentArrayList.get(getPosition(studentArrayList, sid)).getAge() +
"\n\t生日: " + studentArrayList.get(getPosition(studentArrayList, sid)).getBirthday());
}
}
// 查询对应学号所在的列表中的位置,并返回位置。
private static int getPosition(ArrayList<Student> studentArrayList, String sid) {
int position = -1;
for (int i = 0; i < studentArrayList.size(); i++) {
if (studentArrayList.get(i).getSid().equals(sid)) {
position = i;
}
}
return position;
}
// 根据查询方法确认对应学号所在位置。给出修改方法,并打印修改后的参数。
private static void updateStudent(ArrayList<Student> studentArrayList) {
System.out.println("请输入要修改的学生ID");
String sid = (new Scanner(System.in)).nextLine();
if (getPosition(studentArrayList, sid) != -1) {
System.out.println("学号 " + sid + " 新名字: ");
studentArrayList.get(getPosition(studentArrayList, sid)).setName(new Scanner(System.in).nextLine());
System.out.println("学号 " + sid + " 新年龄: ");
studentArrayList.get(getPosition(studentArrayList, sid)).setAge(new Scanner(System.in).nextInt());
System.out.println("学号 " + sid + " 新生日: ");
studentArrayList.get(getPosition(studentArrayList, sid)).setBirthday(new Scanner(System.in).nextLine());
System.out.println("成功修改学号 " + sid + " 信息如下:" +
"\n\t姓名: " + studentArrayList.get(getPosition(studentArrayList, sid)).getName() +
"\n\t年龄: " + studentArrayList.get(getPosition(studentArrayList, sid)).getAge() +
"\n\t生日: " + studentArrayList.get(getPosition(studentArrayList, sid)).getBirthday());
}
}
//
private static void removeStudent(ArrayList<Student> studentArrayList) {
System.out.println("请输入要删除的学生ID: ");
String sid = (new Scanner(System.in)).nextLine();
if (getPosition(studentArrayList, sid) != -1) {
studentArrayList.remove(getPosition(studentArrayList, sid));
System.out.println("学号 " + sid + " 删除成功!");
} else {
System.out.println("所删除学生不存在。");
}
}
private static void addStudent(ArrayList<Student> studentArrayList) {
Scanner studentInfo = new Scanner(System.in);
System.out.println("sid: ");
String sid = studentInfo.nextLine();
System.out.println("name: ");
String name = studentInfo.nextLine();
System.out.println("age: ");
int age = studentInfo.nextInt();
// 我们使用键盘输入的时候,其实输入了三部分 age的内容,换行符,birthday的内容
// 方法一:将换行符读掉
studentInfo.nextLine();
System.out.println("birthday: ");
// 方法二:重新创建Scanner对象:
/*
* Scanner sc1=new Scanner(System.in);
* int n=sc1.nextInt();
* Scanner sc2=new Scanner(System.in);
* String s=sc2.nextLine();
* */
String birthday = studentInfo.nextLine();
Student s = new Student(sid, name, age, birthday);
studentArrayList.add(s);
if (getPosition(studentArrayList, sid) != -1) {
System.out.println("添加学生信息成功, 学号 " + sid + " 信息如下:" +
"\n\t姓名: " + studentArrayList.get(getPosition(studentArrayList, sid)).getName() +
"\n\t年龄: " + studentArrayList.get(getPosition(studentArrayList, sid)).getAge() +
"\n\t生日: " + studentArrayList.get(getPosition(studentArrayList, sid)).getBirthday());
}
}
}