Java基础(第九期):Java中的集合 ArrayList 集合的增删改查 Java实现学生信息管理系统
⚠️Java基础专栏
文章目录
- ⚠ Java基础最后一期(第九期)到此结束
- Java中的集合
- 一、什么是集合
- 二、ArrayList
- 2.1 ArrayList介绍
- 2.2ArrayList使用
- 2.3 ArrayList添加
- add()方法
- add(index,E element)方法
- 2.4 ArrayList删除
- remove(index)方法
- remove (object) 方法
- 2.5 ArrayList修改
- set(index ,element)方法
- 2.6 ArrayList查询
- get(index)方法
- size()方法
- 2.7 ArrayList集合的小练习
- 练习一、
- 练习二、
- 练习三、
- 练习四、
- 练习五、
- 练习六、
- Array List常用方法总汇
- 三、学生信息管理系统
⚠ ⚠ Java进阶专栏!!!!!
⚠ Java基础最后一期(第九期)到此结束
Java中的集合
一、什么是集合
- 集合是一种容器,用来装数据,类似于数组。
与数组的区别就是,数组定义玩了,长度就固定了
- 而集合是可变的,开发中用的最多。
二、ArrayList
2.1 ArrayList介绍
ArrayList:是一个可变数组,无参构造默认初始化一个长度为10空间,若是超出,那么会扩容到原来的1.5倍。
原理图:
看场景使用:
- 如果是固定不变的则使用数组
- 如果是随机的不确定的,在使用ArrayList集合存放。
2.2ArrayList使用
细节:创建StringBuilde 、 String、 ArrayList的对象,打印对象名,都没有看到地址值,都是元素的内容哦!
1. 构造方法:
public ArrayList() : 创建一个空的集合容器
2. 集合容器的创建细节:
ArrayList list = new ArrayList();
现象;可以添加任意数据类型
弊端:数据不严谨
使用格式:
// ArrayList的使用
ArrayList<String> list = new ArrayList<>();
list.add("泛型限定后只能添加字符串");
System.out.println(list); // [泛型限定后只能添加字符串]
-
<数据类型>: 里面写数据类型,jdk7以上在后面的<>中可以为空。
-
泛型<>:
<>:中不能出现基本数据类型,想要写其基本数据类型,就得使用包装类(首字母大写就会有提示)
集合练习:
// 1. 创建一个集合容器,内部存储 11.1 22.2 33.3
ArrayList<Double> num = new ArrayList<>();
num.add(11.1);
num.add(22.2);
num.add(33.3);
System.out.println(num);
// 2. 创建一个集合容器,内部存储 张三,李四,王五
ArrayList<String> string = new ArrayList<>();
string.add("张三");
string.add("李四");
string.add("王五");
System.out.println(string);
- 泛型非常强势的。
2.3 ArrayList添加
add()方法
- 将指定的元素添加到集合的尾部。
- 返回值为boolean类型(永远为true)。
add(index,E element)方法
- 将元素插入到指定的位置上(插队)
- 返回值为空,有索引必定会出现越界的关系
// add()无参方法
ArrayList<String> list = new ArrayList<>();
list.add("liu");
list.add("jin");
list.add("tao");
System.out.println(list);
// add(index, E element) 带参方法(插入添加)
list.add(2, "插入");
list.add(4, "尾部添加");
System.out.println(list);
- 记住带参方法添加不能越界
2.4 ArrayList删除
remove(index)方法
- 根据索引号做删除,返回值为被删除的元素。
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
// remove(index)删除方法
System.out.println(list); // [张三, 李四, 王五]
String result = list.remove(1);
System.out.println(result); // 李四
System.out.println(list); // [张三, 王五]
remove (object) 方法
- 根据指定元素删除,返回值为是否成功(boolean类型)
// remove(object)删除方法
System.out.println(list); // [张三, 王五]
boolean remove = list.remove("王五");
System.out.println(remove); // true
System.out.println(list); // [张三]
2.5 ArrayList修改
set(index ,element)方法
- 修改指定索引号的元素值,返回被覆盖(修改)的值。
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
// set(index , new element)方法
String result = list.set(2, "赵六");
System.out.println(result); // 王五
System.out.println(list); // [张三, 李四, 赵六]
2.6 ArrayList查询
get(index)方法
- 根据索引号获取集合元素,返回索引对应的元素
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
// 查询(index)方法
String result = list.get(2);
System.out.println(result); // 王五
size()方法
- 返回集合中元素的个数
// 查询集合长度方法
int len = list.size();
System.out.println(len); // 3
以上就是集合ArrayList的常用过的
增删改查
操作了。
2.7 ArrayList集合的小练习
练习一、
需求:创建一个类型为字符串类型的集合,然后取出每一个元素
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
for (int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
练习二、
需求:定义一个字符串类型的集合,然后对字符串长度为4的元素做打印。
ArrayList<String> list = new ArrayList<>();
list.add("12");
list.add("123");
list.add("1234");
list.add("1212");
list.add("1213");
list.add("1213213");
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if (s.length() == 4) {
System.out.println(s);
}
}
练习三、
需求:创建一个存储学生对象的集合,存储三个学生对象,并且打印年龄低于18岁的学生信息
Student类
package com.liujintao.domain;
public class Student {
String name;
int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
}
测试类文件
package com.liujintao.test;
import com.liujintao.domain.Student;
import java.util.ArrayList;
public class ArrayListText02 {
public static void main(String[] args) {
Student stu1 = new Student("张三", 24);
Student stu2 = new Student("李四", 8);
Student stu3 = new Student("王五", 15);
// 创建学生集合
ArrayList<Student> list = new ArrayList<>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
// 输出年龄小于18岁的学生信息
for (int i = 0; i < list.size(); i++) {
Student age = list.get(i);
if (age.getAge() == 18) {
System.out.println(age.getName() +"---" + age.getAge());
}
}
}
}
练习四、
需求:
创建一个存储学生对象的集合,存储3个学生对对象,使用程序实现在控制台遍历该集合,学生的姓名和年龄来自于键盘录入。
测试类:
package com.liujintao.test;
import com.liujintao.domain.Student;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListText03 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
System.out.println("请输入第" + i + "个学生的信息");
addStudent(list);
}
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getName() + "---" + stu.getAge());
}
}
public static void addStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
Student stu = new Student(name, age);
list.add(stu);
}
}
学生类:
package com.liujintao.domain;
public class Student {
String name;
int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
}
请输入第1个学生的信息
请输入学生姓名:
张三
请输入学生年龄:
23
请输入第2个学生的信息
请输入学生姓名:
李四
请输入学生年龄:
24
请输入第3个学生的信息
请输入学生姓名:
王五
请输入学生年龄:
25
张三—23
李四—24
王五—25
练习五、
需求:创建一个存储String的集合,内部存储(test, 张三, test,test, 李四)字符串
删除所有的test字符串,删除后,将集合剩余元素打印在控制台
-
注意点,ArrayList集合是自动收缩的,删除了,会补齐,印象影响引用的指向。
-
建议,正序清除记得–
-
反序正常遍历即可。
package com.liujintao.test;
import java.util.ArrayList;
public class ArrayListTest04 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("张三");
list.add("李四");
list.add("test");
list.add("test");
// 方法一:正序遍历处理
method1(list);
// 方法二:倒序遍历处理
method2(list);
}
private static void method2(ArrayList<String> list) {
for (int i = list.size() - 1; i >= 0; i--) {
String s = list.get(i);
if ("test".equals(s)) {
list.remove(i);
}
}
System.out.println(list);
}
private static void method1(ArrayList<String> list) {
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if ("test".equals(s)) {
list.remove(i);
i--;
}
}
System.out.println(list);
}
}
练习六、
需求: 定义一个方法,方法接受一个集合对象(泛型为Student)
方法内部将年龄低于 18 的学生对象找出
并存入新集合对象,方法返回新集合
package com.liujintao.test;
import com.liujintao.domain.Student;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListTest05 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
// 初始化JavaBean数据
list.add(new Student("张三", 13));
list.add(new Student("李四", 14));
list.add(new Student("王五", 24));
list.add(new Student("赵六", 15));
list.add(new Student("小明", 23));
ArrayList<Student> result = handleFilter(list);
// 遍历打印
for (Student stu : result) {
System.out.println(stu.getName() + " --" + stu.getAge());
}
}
/**
* 过滤学生数据
* @param list
* @return ArrayList<Student> list
*/
private static ArrayList<Student> handleFilter(ArrayList<Student> list) {
ArrayList<Student> newList = new ArrayList<>();
for (Student stu : list) {
if (stu.getAge() < 18) {
newList.add(stu);
}
}
return newList;
}
}
张三 --13
李四 --14
赵六 --15
Array List常用方法总汇
三、学生信息管理系统
需求:完成学生的信息管理(增删改查功能的实现)
根据菜单栏(完成相应的功能);
System.out.println("1 添加学生");
System.out.println("2 删除学生");
System.out.println("3 修改学生");
System.out.println("4 查看学生");
System.out.println("5 退出");
业务逻辑类:
package com.liujintao.priject;
import java.util.ArrayList;
import java.util.Scanner;
public class manageSystem {
public static void main(String [] args) {
/**
* 启动
*/
start();
}
/**
* 系统入口
*/
public static void start() {
// 学生信息库
ArrayList<Student> list = new ArrayList<>();
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 sc = new Scanner(System.in);
sc = new Scanner(System.in);
int num = sc.nextInt();
switch (num) {
case 1:
addStudent(list);
break;
case 2:
handleDelete(list);
break;
case 3:
changeStudent(list);
break;
case 4:
queryStudent(list);
break;
case 5:
System.out.println("退出");
System.exit(0);
default:
System.out.println("业务暂未开通,请确认后重试!");
break;
}
}
}
/**
* 添加学生信息
* @param list
*/
public static void addStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生学号");
String id = sc.next();
// 下标都不存在,则视为学生信息不存在,放行
int result = getIndex(id, list);
if (result == -1) {
System.out.println("请输入学生姓名");
String name = sc.next();
System.out.println("请输入学生年龄");
int age = sc.nextInt();
System.out.println("请输入学生出生日期");
String datebirth = sc.next();
Student stu = new Student(id, name, age, datebirth);
list.add(stu);
System.out.println("添加成功!");
} else {
System.out.println("该信息已经被使用");
}
}
/**
* 删除学生信息
*/
public static void handleDelete (ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要删除的学生学号:");
String inputId = sc.next();
// 根据学号拿到学生对象的下标
int id = getIndex(inputId, list);
for (int i = 0; i < list.size(); i++) {
if (id == -1) {
System.out.println("无法删除不存在的学生信息!");
break;
} else {
list.remove(id);
System.out.println("删除成功!");
}
}
}
/**
* 修改学生信息
*/
public static void changeStudent(ArrayList<Student> list) {
// 拿到需要删除的学生学号,然后再得到下标处理
Scanner sc = new Scanner(System.in);
System.out.println("请输入您需要修改的学生编号:");
String inputId = sc.next();
// 调用方法处理得到下标
int index = getIndex(inputId, list);
if (index != -1) {
System.out.println("请输入修改后的姓名:");
String changeName = sc.next();
System.out.println("请输入修改后的年龄:");
int changeAge = sc.nextInt();
System.out.println("请输入修改后的出生日期:");
String changeDate = sc.next();
// 将新的值覆盖
list.get(index).setId(inputId);
list.get(index).setName(changeName);
list.get(index).setAge(changeAge);
list.get(index).setDatebirth(changeDate);
System.out.println("修改成功!");
} else {
System.out.println("您需要修改的学生信息不存在!");
}
}
/**
* 查询学生信息
*/
public static void queryStudent (ArrayList<Student> list) {
System.out.println("学号\t\t\t\t姓名\t年龄\t出生日期");
for (Student stu : list) {
System.out.println(stu.getId() + stu.getName() + stu.getAge() + stu.getDatebirth());
}
}
/**
* 获取学生在信息库的下标(根据id来判断)
*/
public static int getIndex(String id, ArrayList<Student> list) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
return i;
}
}
return -1;
}
}
javaBean数据类:
package com.liujintao.priject;
class Student {
/**
* 成员方法学生信息
* id: 学号
* name:姓名
* age:年龄
* datebirth:出生日期
*/
private String id;
private String name;
private int age;
private String datebirth;
/**
* 初始化数据使用构造器
*/
public Student() {
}
public Student(String id, String name, int age, String datebirth) {
this.id = id;
this.name = name;
this.age = age;
this.datebirth = datebirth;
}
/**
* 获取
* @return id
*/
public String getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
/**
* 获取
* @return datebirth
*/
public String getDatebirth() {
return datebirth;
}
/**
* 设置
* @param datebirth
*/
public void setDatebirth(String datebirth) {
this.datebirth = datebirth;
}
}