# 集合
# 为什么要有集合
- 数据长度固定,不能扩容
- 集合当存入元素时自动扩容
# 数组和集合的区别
# 数组
- 长度固定,不能扩容
- 基本数据类型和引用数据类型都可以存储
# 集合
- 长度可变,可以扩容
- 集合中只能存储引用数据类型
- 想要集合存储基本数据类型,需要将基本数据类型转换基本数据类型的包装类
# ArrayList集合类的使用
- 使用
ArrayList集合类时,需要导入java.util.ArrayList包 - 使用
ArrayList集合类时,打印的对象不是地址值,而是集合中存储的内容 ArrayList集合类是泛型类,尖括号中填写的数据类型就是集合中每个元素存储的类型
public class main {
public void main(String[], args) {
//new ArrayList<>()不允许初始值
ArrayList<String> list = new ArrayList<>();
System.out.println(list);//[]
}
}
# 成员方法
| 方法名 | 说明 |
|---|---|
boolean add(E e) | 将指定的元素添加到此列表的末尾,返回值表示是否添加成功 |
boolean contains(Object o) | 如果此列表包含指定的元素,则返回true |
E remove(Object o) | 删除指定索引的元素,返回被删除的元素 |
E get(int index) | 返回此列表中指定索引的元素 |
E getFirst() | 返回此列表的第一个元素 |
E getLast() | 返回此列表的最后一个元素 |
int indexOf(Object o) | 返回此列表中指定元素的首次出现的索引,如果列表不包含元素,则返回-1 |
boolean isEmpty() | 如果列表不包含元素,则返回true |
E set(int index, E element) | 用指定的元素替换此列表中指定位置的元素,返回被替换的元素 |
int size() | 返回此列表中的元素个数 |
Object[] toArray() | 返回包含列表中所有元素的数组(返回值类型为Object[]) |
void clear() | 移除此列表中的所有元素 |
public class main {
public void main(String[], args) {
ArrayList<String> list = new ArrayList<>();
//添加
boolean b = list.add("张三");
list.add("李四");
System.out.println(b);//true
System.out.println(list);//[张三, 李四]
//删除
//根据元素进行删除
boolean b1 = list.remove("1");
System.out.println(b1);//false
//根据索引进行删除(无返回值)
list.remove(1);
System.out.println(list);//[张三]
//查询元素
System.out.println(list.get(0));//张三
//获取集合第一位元素
System.out.println(list.getFirst());//张三
//获取集合最后一位元素
System.out.println(list.getLast());//张三
//返回此列表中指定元素的首次出现的索引,如果列表不包含元素,则返回-1
System.out.println(list.indexOf("李四"));//-1
//如果列表不包含元素,则返回true
System.out.println(list.isEmpty());//false
//修改元素
list.set(0, "王五");
System.out.println(list);//[王五]
//返回数组长度
System.out.println(list.size());//1
}
}
# 基本数据类型所对应的包装类
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
练习
- 创建一个数字类型的集合并遍历
public class main {
public static void main(String[] args) {
ArrayList<Integer> array = new ArrayList<>();
array.add(1);
array.add(2);
array.add(3);
array.add(4);
System.out.println("长度" + array.size());
System.out.print("[");
for (int i = 0; i < array.size(); i++) {
if (i == array.size() - 1) {
System.out.printf(array.get(i) + "");
} else System.out.printf(array.get(i) + ", ");
}
System.out.print("]");//[1, 2, 3, 4]
}
}
- 定义一个集合,添加一些学生对象,并进行遍历,学生类的属性为:姓名,年龄
public class main {
public static void main(String[] args) {
//泛型Student是一个标准的JavaBean类包含姓名和年龄两个成员属性
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("张三", 18));
students.add(new Student("李四", 19));
students.add(new Student("王五", 20));
for (Student student : students) System.out.println(student.getName() + student.getAge());
}
}
# 简化版学生管理系统
要求
- 添加学生
- 查询学生
- 删除学生
- 修改学生
package studentSystem;
import java.util.ArrayList;
import java.util.Scanner;
public class main {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
loop:
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 scanner = new Scanner(System.in);
int choice = scanner.nextInt();
switch (choice) {
case 1 -> addStudent(students);
case 2 -> deleteStudent(students);
case 3 -> updateStudent(students);
case 4 -> searchStudent(students);
case 5 -> {
System.out.println("退出");
break loop;
// System.exit(0);//停止虚拟机运行
}
default -> System.out.println("输入错误");
}
}
}
//添加学生
public static void addStudent(ArrayList<Student> students) {
Scanner scanner = new Scanner(System.in);
String id;
while (true) {
System.out.println("请输入学生id");
id = scanner.next();
if (isExistById(students, id)) {
System.out.println("id已存在");
} else {
break;
}
}
System.out.println("请输入学生姓名");
String name = scanner.next();
System.out.println("请输入学生年龄");
int age = scanner.nextInt();
students.add(new Student(id, name, age));
System.out.println("添加成功");
}
//删除学生
public static void deleteStudent(ArrayList<Student> students) {
System.out.println("删除学生");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生id");
String id = scanner.next();
int index = getIndexById(students, id);
if (index != -1) {
students.remove(index);
System.out.println("删除成功");
} else {
System.out.println("id不存在");
}
}
//修改学生
public static void updateStudent(ArrayList<Student> students) {
System.out.println("修改学生");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生id");
String id = scanner.next();
int index = getIndexById(students, id);
if (index != -1) {
Student student = students.get(index);
System.out.println("请输入学生姓名");
student.setName(scanner.next());
System.out.println("请输入学生年龄");
student.setAge(scanner.nextInt());
System.out.println("修改成功");
} else {
System.out.println("id不存在");
}
}
//查询学生
public static void searchStudent(ArrayList<Student> students) {
System.out.println("查询学生");
if (students.isEmpty()) {
System.out.println("当前没有学生数据,请添加后重新查询!");
return;
}
System.out.println("id\t姓名\t年龄");
for (Student student : students) System.out.println(student.getId() + student.getName() + student.getAge());
}
//判断id在集合中是否存在
public static boolean isExistById(ArrayList<Student> students, String id) {
for (Student student : students) {
if (student.getId().equals(id)) {
return true;
}
}
return false;
}
//根据id返回元素索引
public static int getIndexById(ArrayList<Student> students, String id) {
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(id)) {
return i;
}
}
return -1;
}
}