# 集合

# 为什么要有集合

  • 数据长度固定,不能扩容
  • 集合当存入元素时自动扩容

# 数组和集合的区别

# 数组

  • 长度固定,不能扩容
  • 基本数据类型和引用数据类型都可以存储

# 集合

  • 长度可变,可以扩容
  • 集合中只能存储引用数据类型
  • 想要集合存储基本数据类型,需要将基本数据类型转换基本数据类型的包装类

# 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

练习

  1. 创建一个数字类型的集合并遍历
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]
    }
}
  1. 定义一个集合,添加一些学生对象,并进行遍历,学生类的属性为:姓名,年龄
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());
    }
}

# 简化版学生管理系统

要求

  1. 添加学生
  2. 查询学生
  3. 删除学生
  4. 修改学生
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;
    }
}

上次更新: 5/20/2024, 8:34:46 PM