Day09Java基础-集合基础&集合常用成员方法、遍历、删除和筛选&学生管理系统

目录

一. 集合基础

1. 集合定义

2. 集合和数组的使用选择

二. 集合的创建和添加

三. ArrayList 集合常用成员方法

四. 集合遍历

五. 键盘录入学生信息到集合

六. 集合删除数据和筛选

1. 集合删除数据

2. 集合数据筛选

七. 学生管理系统​


一. 集合基础

1. 集合定义

2. 集合和数组的使用选择

数组: 存储的元素个数固定不变.

集合: 存储的元素个数经常发生改变.

二. 集合的创建和添加

package com.itheima.list;

import java.util.ArrayList;

public class ArrayListDemo1 {
    /*
        ArrayList集合的使用:

            细节: 创建String, StringBuilder, ArrayList类对象, 打印对象名, 都没有看到地址值, 而是元素内容.

            1. 构造方法:

                  public ArrayList() : 创建一个空的集合容器

            2. 集合容器的创建细节 :

                    ArrayList list = new ArrayList();
                    现象: 可以添加任意类型数据
                    弊端: 数据不够严谨

                    解决: ArrayList<包装类> list = new ArrayList<>();
                    <> : 泛型
                                目前: 使用泛型, 可以对集合中存在的数据, 进行类型限制
                                细节: 泛型中, 不允许编写基本数据类型
                                问题: 那我要是想集合中, 存储 整数, 小数, 字符... 这些数据, 怎么办呢?
                                解决: 使用基本数据类型, 所对应的包装类

                                        byte        Byte
                                        short       Short
                                        int         Integer     ***(重点记)
                                        long        Long
                                        float       Float
                                        double      Double
                                        boolean     Boolean
                                        char        Character   ***(重点记)

     */
    public static void main(String[] args) {

        // 步骤1: 创建一个集合容器, 内部存储 11.1 22.2 33.3
        ArrayList<Double> list1 = new ArrayList<>();
        list1.add(11.1);
        list1.add(22.2);
        list1.add(33.3);

        // 步骤2: 创建一个集合容器, 内部存储 张三, 李四, 王五
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("张三");
        list2.add("李四");
        list2.add("王五");

        // 步骤3: 在控制台展示两个集合中的元素
        System.out.println(list1);
        System.out.println(list2);


/*        ArrayList<Integer> list = new ArrayList<>();

        list.add(100);
        list.add(45.6);
        list.add(false);
        list.add('a');
        list.add("abc");

        System.out.println(list);*/
    }
}

三. ArrayList 集合常用成员方法

package com.itheima.list;

import java.util.ArrayList;

public class ArrayListDemo2 {
    /*
        ArrayList 常用成员方法:

            1. 增 :
                    public boolean add(E e) : 将指定的元素添加到此列表的尾部
                    public void add(int index, E element) : 在指定索引位置, 添加对应的元素(插队)

            2. 删 :
                    public  E remove(int index) : 根据索引做删除, 返回被删除的元素
                    public  boolean remove(Object o) : 根据元素做删除, 删除列表中首次出现的指定元素(如果存在)。


            3. 改 :
                    public E set(int index, E element) : 修改指定索引位置, 为对应元素, 返回被覆盖掉的元素

            --------------------------------------------------------------------------------------
                    以上方法, 返回值通常不做接收

            4. 查 :
                    public  E get(int index) : 根据索引, 获取集合中的元素
                    public  int size()  : 返回集合元素的个数

     */
    public static void main(String[] args) {

        queryMethod();

    }

    private static void queryMethod() {
        ArrayList<String> list = new ArrayList<>();

        list.add("张三1");
        list.add("张三2");
        list.add("张三3");

        String s = list.get(2);

        System.out.println(s);

        System.out.println(list.size());
    }

    private static void updateMethod() {
        ArrayList<String> list = new ArrayList<>();

        list.add("张三1");
        list.add("张三2");
        list.add("张三3");

        String result = list.set(1, "李四");

        System.out.println(list);

        System.out.println(result);
    }

    private static void removeMethod() {
        ArrayList<String> list = new ArrayList<>();

        list.add("张三1");
        list.add("张三2");
        list.add("张三3");

        System.out.println(list);

        boolean flag = list.remove("李四");

        System.out.println(flag);

        System.out.println(list);
    }

    private static void addMethod() {
        ArrayList<String> list = new ArrayList<>();

        list.add("张三1");
        list.add("张三2");
        list.add("张三3");

        list.add(1, "张三4");

        System.out.println(list);
    }
}

四. 集合遍历

需求1: 
创建一个存储字符串的集合, 内部存储字符串元素

       钢门吹雪, 西域狂鸭, 张三, 珍妮玛黛吟, 李四

       使用程序实现在控制台遍历该集合, 将4个字的人名, 打印在控制台
package com.itheima.test;

import java.util.ArrayList;

public class ArrayListTest1 {
    /*
        需求: 创建一个存储字符串的集合, 内部存储3个字符串元素, 使用程序实现在控制台遍历该集合


        ArrayList<String> list = new ArrayList<>();

        list.add("张三");
        list.add("李四");
        list.add("王五");

        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }
     */

    /*
         需求: 创建一个存储字符串的集合, 内部存储字符串元素

                钢门吹雪, 西域狂鸭, 张三, 珍妮玛黛吟, 李四

                使用程序实现在控制台遍历该集合, 将4个字的人名, 打印在控制台

     */

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<>();

        list.add("钢门吹雪");
        list.add("西域狂鸭");
        list.add("张三");
        list.add("珍妮玛黛吟");
        list.add("李四");

        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            if (s.length() == 4) {
                System.out.println(s);
            }
        }
    }
}
需求2:
 创建一个存储学生对象的集合, 存储3个学生对象, 在控制台, 展示出年龄低于18岁的学生信息.
package com.itheima.domain;

public class Student {
    private String name;
    private 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.itheima.test;

import com.itheima.domain.Student;

import java.util.ArrayList;

public class ArrayListTest2 {
    /*
        需求: 创建一个存储学生对象的集合, 存储3个学生对象, 在控制台, 展示出年龄低于18岁的学生信息
     */

    public static void main(String[] args) {

        Student stu1 = new Student("张三", 23);
        Student stu2 = new Student("李四", 14);
        Student stu3 = new Student("王五", 15);

        ArrayList<Student> list = new ArrayList<>();

        list.add(stu1);
        list.add(stu2);
        list.add(stu3);

        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);

            if (stu.getAge() < 18) {
                System.out.println(stu.getName() + "---" + stu.getAge());
            }
        }
    }
}

五. 键盘录入学生信息到集合

需求: 
创建一个存储学生对象的集合, 存储3个学生对象, 使用程序实现在控制台遍历该集合
            学生的姓名和年龄来自于键盘录入

package com.itheima.test;

import com.itheima.domain.Student;

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

public class ArrayListTest3 {
    /*
        需求: 创建一个存储学生对象的集合, 存储3个学生对象, 使用程序实现在控制台遍历该集合
                    学生的姓名和年龄来自于键盘录入
     */
    public static void main(String[] args) {
        // 1. 准备一个集合容器, 用于存储学生对象
        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());
        }

    }

    private static void addStudent(ArrayList<Student> list) {
        // 2. 键盘录入学生信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();

        // 3. 将键盘录入的学生信息, 封装为学生对象
        Student stu = new Student(name, age);

        // 4. 将封装好的学生对象, 存入集合
        list.add(stu);
    }
}

六. 集合删除数据和筛选


1. 集合删除数据

package com.itheima.test;

import java.util.ArrayList;

public class ArrayListTest4 {
    /*
        需求:创建一个存储String的集合,内部存储(test,张三,李四,test,test)字符串
                删除所有的test字符串,删除后,将集合剩余元素打印在控制台

            for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            // 尽量使用常量调方法, 避免不必要的空指针异常
            if ("test".equals(s)){
                list.remove(i);
                i--;
            }

        注意: 在遍历集合的过程中, 有删除操作
                1. 正序遍历: 不要忘记 --(减减)操作
                2. 倒序遍历: 不需要 --(减减)操作
        }
     */
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("test");

        list.add("test");
        list.add("李四");
        list.add("张三");
        list.add("test");

        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);
    }
}

2. 集合数据筛选

需求: 
        定义一个方法, 方法接收一个集合对象(泛型为Student), 方法内部将年龄低于18的学生对象找出, 并存入新集合对象, 方法返回新集合
package com.itheima.test;

import com.itheima.domain.Student;

import java.util.ArrayList;

public class ArrayListTest5 {
    /*
        需求: 定义一个方法, 方法接收一个集合对象(泛型为Student)
                方法内部将年龄低于18的学生对象找出
                并存入新集合对象, 方法返回新集合
     */
    public static void main(String[] args) {

        ArrayList<Student> list = new ArrayList<>();

        list.add(new Student("张三", 23));
        list.add(new Student("李四", 14));
        list.add(new Student("王五", 15));

        ArrayList<Student> newList = filter(list);

        for (int i = 0; i < newList.size(); i++) {
            Student stu = newList.get(i);
            System.out.println(stu.getName() + "---" + stu.getAge());
        }
    }

    private static ArrayList<Student> filter(ArrayList<Student> list) {
        // 1. 创建新的集合容器, 准备存储帅选后的学生对象
        ArrayList<Student> newList = new ArrayList<>();

        // 2. 遍历list集合容器
        for (int i = 0; i < list.size(); i++) {
            // 3. 创建新的学生对象进行接收
            Student stu = list.get(i);
            // 4. 筛选条件
            if (stu.getAge() < 18) {
                newList.add(stu);
            }
        }

        return newList;
    }
}

七. 学生管理系统

package com.itheima.domain;

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

    public Student() {
    }

    public Student(String id, String name, int age, String birthday) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    /**
     * 获取
     * @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 birthday
     */
    public String getBirthday() {
        return birthday;
    }

    /**
     * 设置
     * @param birthday
     */
    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }


}
package com.itheima.test;

import com.itheima.domain.Student;

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

public class Test {
    public static void main(String[] args) {

        /*Student stu1 = new Student("heima001","张三",23,"1999-11-11");
        Student stu2 = new Student("heima002","李四",24,"1999-11-12");
        Student stu3 = new Student("heima003","王五",25,"1999-12-11");*/

        // 增删改查都是围绕着这个集合进行操作
        ArrayList<Student> list = new ArrayList<Student>();

       /* list.add(stu1);
        list.add(stu2);
        list.add(stu3);*/

        Scanner sc = new Scanner(System.in);

        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("请输入您的选择:");

            int choice = sc.nextInt();

            switch (choice) {
                case 1:
                    addStudent(list);
                    break;
                case 2:
                    deleteStudentById(list);
                    break;
                case 3:
                    updateStudentInfoById(list);
                    break;
                case 4:
                    queryStudentInfos(list);
                    break;
                case 5:
                    System.out.println("感谢您的使用, 再见!");
                    System.exit(0);     // 正常终止正在运行的JVM虚拟机
                    break;
                default:
                    System.out.println("您的输入有误, 请检查!");
                    break;
            }
        }
    }

    /**
     * 此方法用于键盘录入学生信息, 封装学生对象, 存入集合
     */
    private static void addStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生学号:");

        String id = null;
        while (true) {
            id = sc.next();

            int index = getIndex(id, list);

            if (index==-1){
                // 学号在集合中不存在, 可以使用
                break;
            }else{
                System.out.println("您输入的学号已被占用, 请重新输入:");
            }
        }


        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();
        System.out.println("请输入学生生日:");
        String birthday = sc.next();

        Student stu = new Student(id, name, age, birthday);

        list.add(stu);

        System.out.println("添加成功!");
    }

    /**
     * 根据学号修改集合中的学生信息
     */
    private static void updateStudentInfoById(ArrayList<Student> list) {
        // 1. 键盘录入要修改的学生学号
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改的学生学号:");
        String updateId = sc.next();
        // 2. 调用 getIndex 方法查找学号对应的索引
        int index = getIndex(updateId,list);
        // 3. 如果学号不存在, 给出错误提示
        if (index==-1){
            System.out.println("查无此人, 修改失败!");
        }else{
            // 4. 如果学号不存在, 录入新的学生信息, 完成修改
            System.out.println("请输入新的学生姓名:");
            String name = sc.next();
            System.out.println("请输入新的学生年龄:");
            int age = sc.nextInt();
            System.out.println("请输入新的学生生日:");
            String birthday = sc.next();

            // 将新录入的学生信息, 封装为学生对象
            Student stu = new Student(updateId,name,age,birthday);

            list.set(index,stu);
        }

    }

    /**
     * 根据学号删除集合中的学生
     */
    private static void deleteStudentById(ArrayList<Student> list) {
        // 1. 键盘录入要删除的学生学号
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要删除的学生学号:");
        String id = sc.next();
        // 2. 调用getIndex方法, 查找学号在集合中的索引
        int index = getIndex(id, list);
        // 3. 判断方法的返回值是否是-1
        if (index==-1){
            // 3.1 是-1, 说明学号不存在, 给出错误提示
            System.out.println("查无此人, 删除失败!");
        }else{
            // 3.2 不是-1, 说明学号存在, 根据索引作删除
            list.remove(index);
            System.out.println("删除成功!");
        }

    }

    /**
     * 此方法用于查看学生
     */
    private static void queryStudentInfos(ArrayList<Student> list) {
        if (list.size() == 0) {
            System.out.println("查无信息, 请添加后重试!");
        } else {
            System.out.println("学号\t\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.getBirthday());
            }
        }
    }

    /**
     * 此方法根据学号, 去集合中查找对应的索引
     */
    private static int getIndex(String id, ArrayList<Student> list) {
        // 1. 遍历集合, 获取到每一个学生对象
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            // stu.getId() : 从集合中取出的学生学号
            // id : 要查找的学号
            // 2. 比对
            if (stu.getId().equals(id)){
                // 3. 找到了, 返回正确的索引位置
                return i;
            }
        }
        // 4. 没找到, 返回-1
        return -1;
    }
}


  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码里码理~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值