集合基础ArrayList
文章目录
一、集合
集合和数组的区别对比:
集合类的特点:提供一种存储空间可变的存储
模型,存储的数据容量可以发生改变
集合和数组的区别:
- 共同点:都是存储数据的容器
- 不同点:
数组容量固定
,集合容量可变
1.1、ArrayList构造方法和添加方法
如何创建一个集合对象:
格式:
ArrayList list = new ArrayList(); //不完整格式
ArrayList<泛型> list = new ArrayList<>(); //完整格式
如果不指定集合泛型,那么集合可以存储多个不同类型数据,但是这样的需求少之又少,所以创建集合对象我们需要指定泛型
泛型的作用:对集合存储的类型的数据进行限制
(只能填写引用数据类型
)
集合如要存基本数据类型,泛型要写基本类型对应的包装类型:
byte --> Byte
short --> Short
char --> Character
int --> Integer
long --> Long
float --> Float
double --> Double
boolean --> Boolean
除了int的包装类是Integer,char的包装类是Character这两个特殊,其余都是首字母大写(Byte、Short、Long、Float、Double、Boolean)
集合的添加方法:
public boolean add(E e);
:将指定元素追加到集合末尾public boolean add(int index, E e);
: 将指定元素插入到指定索引处
public class Demo{
public static void main(String[] args){
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("123");
//遍历打印集合元素
for(int i = 0; i < list.size(); i++){
String s = list.get(i);
System.out.println(s);
}
list.add(0,"666");
//遍历打印集合元素
for(int i = 0; i < list.size(); i++){
String s = list.get(i);
System.out.println(s);
}
}
}
1.2、ArrayList常用成员方法
常用方法:
public boolean remove(Obj o);
: 删除指定的元素,返回是否删除成功public E remove(int index);
: 根据索引删除元素,返回被删除的元素public E set(int index, E e);
: 修改指定索引处的元素,返回被修改的元素public E get(int index);
:返回指定索引处的元素public int size();
:返回集合中元素个数public boolean add(E e);
:将指定元素追加到集合末尾public boolean add(int index, E e);
: 将指定元素插入到指定索引处
public class Demo{
public static void main(String[] args){
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("123");
//遍历打印集合元素
for(int i = 0; i < list.size(); i++){
String s = list.get(i);
System.out.println(s);
}
list.add(0,"666");
//遍历打印集合元素
for(int i = 0; i < list.size(); i++){
String s = list.get(i);
System.out.println(s);
}
list.remove("123");
list.remove(1,"abc");
int size = list.size();
System.out.println(size);
}
}
二、学生管理系统
2.1、步骤分析&学生类代码编写
步骤:
- 创建
Student
学生类,属性有id、name、age、address
,全部定义为String
类型;提供空参带参构造;提供getXxx、setXxx
方法 - 创建
StudentManager
类,main
方法中,使用输出语句配合switch
搭建主界面(提示用户输入1、2、3、4、0的整数,分别执行对应CRUD
的方法) - 在
switch
的case
中,分别实现对应功能的方法 - 测试系统功能,修复bug,优化代码(将重复代码抽取成方法)
/*
【1】学生类,属性都使用private修饰,都是String类型
学号 -> 唯一标识
姓名
年龄
住址
*/
public class Student {
// 成员变量
private String id; //是学生对象的[唯一标识]
private String name;
private String age;
private String address;
// 构造方法
public Student() {
}
public Student(String id, String name, String age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
// 成员方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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;
}
}
2.2、菜单搭建
/*
【2】界面的搭建
【3】完成增、删、改、查以及退出的方法
*/
public class StudentManager {
public static void main(String[] args) {
// 创建集合
ArrayList<Student> list = new ArrayList<>();
// 创建键盘
Scanner sc = new Scanner(System.in);
lo:
while (true) {
// 界面搭建
System.out.println("## 欢迎使用学生管理系统 ##");
System.out.println("1 添加学生");
System.out.println("2 删除学生");
System.out.println("3 修改学生");
System.out.println("4 查询学生");
System.out.println("0 退出");
// 提示并接收用户的选择
System.out.println("请输入你的选择:");
int choose = sc.nextInt();
// 使用switch语句完成匹配
switch (choose) {
case 1:
//System.out.println("添加");
addStundet(list, sc);
break;
case 2:
//System.out.println("删除");
deleteStudent(list, sc);
break;
case 3:
//System.out.println("修改");
updateStudent(list, sc);
break;
case 4:
//System.out.println("查询");
findAllStudent(list);
break;
case 0:
System.out.println("谢谢使用,正在退出..");
//1.退出JVM
//System.exit(0);
//2.循环标号退出
break lo;
default:
System.out.println("您选择的功能尚未开发!");
break;
}
}
}
}
2.3、判断学号是否存在的方法定义
/*
抽取方法getIndex
作用:在传入的集合中,查找传入的学号对应的学生是否存在
存在:返回该学生对象对应的索引
不存在:返回-1
两个明确:
返回值类型:int
参数列表:ArrayList<Student> list,String id
*/
public static int getIndex(ArrayList<Student> list, String id) {
// 判断id是否重复
int index = -1;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
// id存在,记录对象的索引
index = i;
break;
}
}
// 返回index变量
return index;
}
2.4、封装学生对象的方法
/*
封装学生对象的方法 createStu
参数列表:String id
返回值类型:Student
*/
public static Student createStu(String id) {
Scanner sc = new Scanner(System.in);
// 提示录入信息
System.out.println("请输入姓名:");
String name = sc.next();
System.out.println("请输入年龄:");
String age = sc.next();
System.out.println("请输入住址:");
String address = sc.next();
// 封装成学生对象
Student stu = new Student(id, name, age, address);
// 返回学生对象
return stu;
}
2.5、[ 增 ] 添加学生
// 添加学生
public static void addStundet(ArrayList<Student> list, Scanner sc) {
for (; ; ) {
// 提示录入信息
System.out.println("请输入学号:");
String id = sc.next();
// 【逻辑】学号重复的判断
// 调用方法,完成对学号的判断
int index = getIndex(list, id);
// 【逻辑】循环结束,对index的结果进行判断
if (index == -1) {
// 还是-1:证明学号不重复,可以继续录入
// 调用方法,封装对象
Student stu = createStu(id);
// 添加到list集合
list.add(stu);
// 成功提示
System.out.println("添加成功!");
// 结束循环
break;
} else {
// 不是-1:证明重复,错误提示
System.out.println("您输入的学号已存在,请重新输入!");
}
}
}
2.6、[ 查 ] 查看学生
// 查询学生
public static void findAllStudent(ArrayList<Student> list) {
// 非空判断
// if(list.size() == 0){
if (list.isEmpty()) {
System.out.println("系统中还未添加学生,请先去添加!");
// 结束方法
return;
}
// 打印信息头 -> 自由调试一下,重点放在逻辑
System.out.println("学号 姓名 年龄 住址");
// 遍历集合
for (int i = 0; i < list.size(); i++) {
// 打印所有对象的属性 -> getXxx()
Student stu = list.get(i);
System.out.println(stu.getId() + " " + stu.getName()
+ " " + stu.getAge() + " " + stu.getAddress());
}
}
2.7、[ 删 ] 删除学生
// 删除学生
public static void deleteStudent(ArrayList<Student> list, Scanner sc) {
// 非空判断
// if(list.size() == 0){
if (list.isEmpty()) {
System.out.println("系统中还未添加学生,请先去添加!");
// 结束方法
return;
}
while (true) {
// 提示用户录入要删除的id
System.out.println("请输入学号:");
String id = sc.next();
// 调用方法,完成对学号的判断
int index = getIndex(list, id);
// 对index的结果进行判断
if (index == -1) {
// 如果index还是-1:代表录入的学号不存在,错误提示
System.out.println("您输入的学号不存在,请重新输入!");
} else {
// 如果index不是-1:证明学号存在,根据索引删除(索引在上面已经找到,被index所记录)
list.remove(index);
// 成功提示
System.out.println("删除成功!");
// 停止循环
break;
}
}
}
2.8、[ 改 ] 修改学生
// 修改学生
public static void updateStudent(ArrayList<Student> list, Scanner sc) {
// 非空判断
// if(list.size() == 0){
if (list.isEmpty()) {
System.out.println("系统中还未添加学生,请先去添加!");
// 结束方法
return;
}
while (true) {
// 提示用户录入要修改的id
System.out.println("请输入学号:");
String id = sc.next();
// 调用方法,完成对学号的判断
int index = getIndex(list, id);
// 对index的结果进行判断
if (index == -1) {
// 如果index还是-1:代表录入的学号不存在,错误提示
System.out.println("您输入的学号不存在,请重新输入!");
} else {
// 如果index不是-1:代表找到了,提示录入新的学生信息
// 调用方法,封装对象
Student newStu = createStu(id);
// 修改元素
list.set(index, newStu);
// 成功提示
System.out.println("修改成功!");
// 结束循环
break;
}
}
}