侧边栏壁纸
博主头像
青菜-halo2 博主等级

行动起来,活在当下

  • 累计撰写 74 篇文章
  • 累计创建 6 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

11-集合&学生管理系统

Administrator
2025-09-25 / 0 评论 / 4 点赞 / 25 阅读 / 0 字

11.1 集合

集合和数组的对比:
    长度:
        数组长度固定
        集合长度可变,自动扩容
    存储类型:
        数组可以存基本数据类型,可以引用数据类型
        集合可以存引用数据类型,存基本数据类型时需要包装类

1.1 ArrayList

ArrayList成员方法:

方法名

说明

备注

boolean add(E e)

添加元素,返回值表示是否添加成功

boolean remove(E e)

删除指定元素,返回值表示是否删除成功

E remove(int index)

删除指定索引的元素,返回被删除元素

E set(int index, E e)

修改指定索引下的元素,返回原来的元素

E get(int index)

获取指定索引的元素

int size()

获取集合的长度,集合中元素的个数

package com.yq.listdemo;
​
import java.util.ArrayList;
​
public class ArrayListDemo1 {
    public static void main(String[] args) {
        //1.创建集合的对象
        // 泛型:限定集合中存储数据的类型
        //ArrayList<String> list = new ArrayList<String>();  //JDK7之前的写法
​
        /* 此处创建的是ArrayList的对象,而ArrayList是java中已经写好的类
           这个类在底层做了一些处理,打印对象不是地址值,而是集合中存储的数据内容
           在展示的时候会拿[]把所有的数据进行包裹
        */
        ArrayList<String> list = new ArrayList<>();     //JDK7之后的写法
        System.out.println(list);
​
    }
}
​
package com.yq.listdemo;
​
​
import java.util.ArrayList;
​
/*
    boolean add(E e)       添加
​
    boolean remove(E e)     删除
    E remove(int index)
​
    E set(int index,E e)    修改
​
    E get(int index)        查询
    int size()              获取长度
*/
public class ArrayListDemo2 {
    public static void main(String[] args) {
        //1.创建一个集合
        ArrayList<String> list = new ArrayList<>();
​
        //2.添加元素
        list.add("aaa");
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
​
        //3.删除元素
        /*
        boolean result = list.remove("aaa");
        System.out.println(result);
​
        boolean result2 = list.remove("ddd");
        System.out.println(result2);
​
​
        String str = list.remove(2);
        System.out.println(str);
        */
​
        //修改元素
        String result = list.set(1,"ddd");  //返回被修改前的元素信息
        System.out.println(result);
​
        //查询元素
        String s = list.get(0);
        System.out.println(s);
​
        //遍历元素
        for (int i = 0; i < list.size(); i++){
            //i 以此表示索引
            //list.get(i) 表示元素
            String str = list.get(i);
            System.out.println(str);
        }
​
        System.out.println(list);
    }
}
​

1.2 集合练习

1.2.1 集合的遍历方式

package com.yq.test;
​
import java.util.ArrayList;
​
public class Test1 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<String> list = new ArrayList<>();
​
        //2.添加元素
        list.add("点赞了吗?");
        list.add("收藏了吗?");
        list.add("投币了吗?");
        list.add("转发了吗?");
​
        //3.遍历
        System.out.print("[");
        for (int i = 0; i < list.size(); i++){
            if (i == list.size() - 1 ){
                System.out.print(list.get(i));
            } else {
                System.out.print(list.get(i) + ", ");
            }
        }
        System.out.println("]");
    }
}

1.2.2 添加数字并遍历

基本数据类型的包装类:

基本数据类型

字段

byte

ArrayList<Byte>

short

ArrayList<Short>

char

ArrayList<Character>

int

ArrayList<Integer>

long

ArrayList<Long>

float

ArrayList<Float>

double

ArrayList<Double>

boolean

ArrayList<Boolean>

package com.yq.test;
​
import java.util.ArrayList;
public class Test2 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<Integer> list = new ArrayList<>();
​
        //2.添加元素
        //JDK5以后 int Integer 之间可以互相转化
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
​
        //3.遍历集合
        System.out.print("[");
        for (int i = 0; i < list.size(); i++){
            if (i == list.size() - 1 ){
                System.out.print(list.get(i));
            } else {
                System.out.print(list.get(i) + ", ");
            }
        }
        System.out.println("]");
    }
}
​
package com.yq.test;
​
import java.util.ArrayList;
​
public class Test3 {
    public static void main(String[] args) {
        ArrayList<Character> list = new ArrayList<>();
​
        list.add('a');
        list.add('b');
        list.add('c');
​
        System.out.println(list);
    }
}
​

1.2.3 添加学生对象并遍历

//Student.java
package com.yq.test;
​
public class Student {
    //1.私有化成员变量
    //2.空参构造方法
    //3.带全部参数的构造方法
    //3.get/set方法
​
    private String name;
    private int age;
​
    public Student() {
    }
​
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
​
    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;
    }
}
​
//Test4.java
package com.yq.test;
​
import java.util.ArrayList;
​
public class Test4 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<Student> list = new ArrayList<>();
​
        //2.创建学生对象
        Student s1 = new Student("张三", 23);
        Student s2 = new Student("李四", 24);
        Student s3 = new Student("王五", 25);
​
        //3.添加元素
        list.add(s1);
        list.add(s2);
        list.add(s3);
​
        //4.遍历集合
        for (int i = 0; i < list.size(); i++) {
            //i表示索引
            //list.get(i) 表示 元素(学生对象)
            Student stu = list.get(i);
            System.out.println(stu.getName() + ", " + stu.getAge());
        }
    }
}
​

//Test5.java
package com.yq.test;

import java.util.ArrayList;
import java.util.Scanner;

public class Test5 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<Student> list = new ArrayList<>();
        //刚创建的时候,若不向其中存入数据,则集合长度为0

        //2.键盘录入学生的信息,并添加到集合当中
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            Student s = new Student();
            System.out.println("请输入学生的姓名:");
            String name = sc.next();
            System.out.println("请输入学生的年龄:");
            int age = sc.nextInt();

            //将name和age赋值给学生对象
            s.setName(name);
            s.setAge(age);

            //将学生对象存入集合
            list.add(s);
        }

        System.out.println("集合元素个数为:" + list.size());

        //3.循环遍历集合所有元素
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println("姓名: " + stu.getName() + ",  年龄: " + stu.getAge() + ";");
        }
    }
}

请输入学生的姓名:
张三
请输入学生的年龄:
23
请输入学生的姓名:
李四
请输入学生的年龄:
24
请输入学生的姓名:
王五
请输入学生的年龄:
25
集合元素个数为:3
姓名: 张三,  年龄: 23;
姓名: 李四,  年龄: 24;
姓名: 王五,  年龄: 25;

Process finished with exit code 0

1.2.4 查找用户是否存在

//User.java
package com.yq.test;

public class User {
    private String id;
    private String username;
    private String password;

    public User() {
    }

    public User(String id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
//Test6.java
package com.yq.test;

/* 需求: 
       1.main方法中定义一个集合, 存入三个用户对象, 用户属性为: id  username  password
       2.要求: 定义一个方法, 根据id查找对应的用户信息,
              如果存在, 返回true
              如果不存在, 返回false
*/

import java.util.ArrayList;
public class Test6 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<User> list = new ArrayList<>();

        //2.创建三个用户对象
        User u1 = new User("001", "zhangsan", "123456");
        User u2 = new User("002", "lisi", "12345678");
        User u3 = new User("003", "wangwu", "1234qwer");

        //3.将用户对象添加到集合中
        list.add(u1);
        list.add(u2);
        list.add(u3);

        //4.调用方法检查id是否存在
        boolean flag = contains(list,"001");
        System.out.println(flag);
    }

    //1.要做什么   根据id查找用户
    //2.需要什么才能完成   list id
    //3.是否需要结果     返回
    public static boolean contains(ArrayList<User> list, String id){
        for (int i = 0; i < list.size(); i++){
            //list.get(i).getId().equals(id);
            User u = list.get(i);
            String uid = u.getId();
            if (uid.equals(id) ){
                return true;
            }
        }
        //当循环结束 集合中所有元素比较完毕都没有相同的 返回false
        return false;
    }
}
//Test7.java
package com.yq.test;

/* 需求: 
       1.main方法中定义一个集合, 存入三个用户对象, 用户属性为: id  username  password
       2.要求: 定义一个方法, 根据id查找对应的用户信息,
              如果存在, 返回索引
              如果不存在, 返回-1
*/

import java.util.ArrayList;
public class Test7 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<User> list = new ArrayList<>();

        //2.创建三个用户对象
        User u1 = new User("001", "zhangsan", "123456");
        User u2 = new User("002", "lisi", "12345678");
        User u3 = new User("003", "wangwu", "1234qwer");

        //3.将用户对象添加到集合中
        list.add(u1);
        list.add(u2);
        list.add(u3);

        //4.调用方法检查id是否存在
        int index = getIndex(list,"001");
        System.out.println(index);
        boolean flag = contains(list, "001");
        System.out.println(flag);
    }

    //1.要做什么   根据id查找用户
    //2.需要什么才能完成   list id
    //3.是否需要结果     返回
    public static int getIndex(ArrayList<User> list, String id){
        for (int i = 0; i < list.size(); i++){
            //list.get(i).getId().equals(id);
            User u = list.get(i);
            String uid = u.getId();
            if (uid.equals(id) ){
                return i;
            }
        }
        //当循环结束 集合中所有元素比较完毕都没有相同的 返回false
        return -1;
    }

    public static boolean contains(ArrayList<User> list, String id){
        return getIndex(list,id) >= 0;
    }
}

1.2.5 添加手机对象并返回要求的数据

package com.yq.test;

public class Phone {
    private String brand;
    private int price;

    public Phone() {
    }

    public Phone(String brand, int price) {
        this.brand = brand;
        this.price = price;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}
package com.yq.test;

import java.util.ArrayList;

public class Test8 {
    public static void main(String[] args) {
        //1.创建集合对象
        ArrayList<Phone> list = new ArrayList<>();

        //2.创建手机对象
        Phone p1 = new Phone("小米", 1000);
        Phone p2 = new Phone("苹果", 8000);
        Phone p3 = new Phone("锤子", 2999);

        //3.添加数据
        list.add(p1);
        list.add(p2);
        list.add(p3);

        //4.调用方法
        ArrayList<Phone> phoneInfoList = getPhoneInfo(list);

        //5.遍历集合
        for (int i = 0; i < phoneInfoList.size(); i++) {
            Phone phone = phoneInfoList.get(i);
            System.out.println(phone.getBrand() + ", " + phone.getPrice());
        }
    }

    //1.要做什么    查询手机信息
    //2.需要什么    list
    //3.是否需要返回 返回
    // 技巧:
    // 如果我们需要返回多个数据 , 可以将这些数据先放到一个容器中,再将容器返回
    public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
        //定义一个集合 用于存储价格低于3000 的手机对象
        ArrayList<Phone> resultList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            Phone p = list.get(i);
            int price = p.getPrice();
            if (price < 3000){
                //System.out.println(p.getBrand() +","+ p.getPrice());
                //如果当前手机价格低于3000 那么将手机对象添加到resultList
                resultList.add(p);

            }
        }
        return resultList;
    }
}

11.2 学生管理系统

学生管理系统的需求文档.md

## 学生管理系统

### 需求:

​	采取控制台的方式去书写学生管理系统。

### 分析:

#### 初始菜单:

```java
"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
```

#### 学生类:

​	属性:id、姓名、年龄、家庭住址

#### 添加功能:

​	键盘录入每一个学生信息并添加,需要满足以下要求:

* id唯一

#### 删除功能:

​	键盘录入要删除的学生id,需要满足以下要求:

* id存在删除
* id不存在,需要提示不存在,并回到初始菜单

#### 修改功能:

​	键盘录入要修改的学生id,需要满足以下要求

* id存在,继续录入其他信息
* id不存在,需要提示不存在,并回到初始菜单

#### 查询功能:

​	打印所有的学生信息,需要满足以下要求

* 如果没有学生信息,提示:当前无学生信息,请添加后再查询
* 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)

```java
id			姓名		年龄		家庭住址
heima001	张三		23		 南京
heima002	李四		24		 北京
heima003	王五		25		 广州
heima004	赵六	 	26		 深圳
```

学生管理系统业务结构分析.png

//Student.java
package com.yq.studentsystem;

public class Student {
    private String id;
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(String id, String name, int 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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

//StudentSystem.java
package com.yq.studentsystem;

import javax.naming.Name;
import java.util.ArrayList;
import java.util.Scanner;

public class StudentSystem {
    public static void main(String[] args) {
        ArrayList<Student> list = 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.退出");

            Scanner sc = new Scanner(System.in);
            String choose = sc.next();
            switch (choose){
                case "1" -> addStudent(list);
                case "2" -> deleteStudent(list);
                case "3" -> updateStudent(list);
                case "4" -> queryStudent(list);
                case "5" -> {
                    System.out.println("退出");
                    //break; //只能跳出单层循环 此处只能跳出switch
                    //break loop;  //方法1 用loop标记
                    System.exit(0);  //方法2 停止虚拟机运行
                }
                default -> System.out.println("没有这个选项");
            }
        }
    }

    //添加学生
    public static void addStudent(ArrayList<Student> list){
        //System.out.println("添加学生");
        //利用空参构造学生对象
        Student s = new Student();
        Scanner sc = new Scanner(System.in);
        String id = null;
        while (true){
            System.out.println("输入学生的id");
            id = sc.next();
            boolean flag = contains(list,id);
            if (flag){
                System.out.println("id已经存在, 重新输入");
            } else {
                s.setId(id);
                break;
            }
        }

        System.out.println("输入学生的姓名");
        String name = sc.next();
        s.setName(name);

        System.out.println("输入学生的年龄");
        int age = sc.nextInt();
        s.setAge(age);

        System.out.println("输入学生的家庭住址");
        String address = sc.next();
        s.setAddress(address);

        //将学生对象添加到集合中
        list.add(s);

        System.out.println("-----学生信息添加成功-----");
    }

    //删除学生
    public static void deleteStudent(ArrayList<Student> list){
        //System.out.println("删除学生");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入需要删除的学生id");
        String id = sc.next();
        int index = getIndex(list,id);
        if(index >= 0){
            list.remove(index);
            System.out.println("id为: " + id + "的学生删除成功");
        } else {
            System.out.println("id不存在 删除失败");
        }
    }

    //修改学生
    public static void updateStudent(ArrayList<Student> list){
        //System.out.println("修改学生");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入需要修改的学生id");
        String id = sc.next();
        int index = getIndex(list,id);
        if (index >=0 ){

            Student s = list.get(index);

            System.out.println("输入学生的姓名");
            String name = sc.next();
            s.setName(name);

            System.out.println("输入学生的年龄");
            int age = sc.nextInt();
            s.setAge(age);

            System.out.println("输入学生的家庭住址");
            String address = sc.next();
            s.setAddress(address);


            System.out.println("-----学生信息修改成功-----");
        } else {
            System.out.println("id不存在 修改失败");
        }
    }

    //查询学生
    public static void queryStudent(ArrayList<Student> list){
        //System.out.println("查询学生");
        if (list.size() == 0){
            System.out.println("当前学生信息, 请添加后再查询");
            return;
        }
        System.out.println("id\t\t姓名\t年龄\t家庭住址");
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println(stu.getId() + "\t" + stu.getName() +"\t"+ stu.getAge() +"\t"+ stu.getAddress());
        }
    }

    //判断id是否集合中
    public static boolean contains(ArrayList<Student> list, String id){
        //循环遍历集合,得到每一个学生对象,拿到学生id后进行判断
        //存在 ture ; 不存在 false
        /*for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            String sid = stu.getId();
            if (sid.equals(id)){
                return  true;
            }
        }
        return false;*/
        return getIndex(list,id) >= 0;

    }

    //通过id获取索引的方法
    public static int getIndex(ArrayList<Student> list, String id){
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);  //得到学生对象
            String sid = stu.getId();   //得到学生的id
            if(sid.equals(id)){
                return i;           //判断id是否一样 如果一样,则返回索引
            }
        }
        return -1;
    }
}


4

评论区