Java基础(第九期):Java中的集合 ArrayList && 集合的增删改查 && Java实现学生信息管理系统

⚠️Java基础专栏

文章目录

⚠ ⚠ Java进阶专栏!!!!!

⚠ Java基础最后一期(第九期)到此结束

Java中的集合

一、什么是集合

  • 集合是一种容器,用来装数据,类似于数组。

与数组的区别就是,数组定义玩了,长度就固定了

  • 而集合是可变的,开发中用的最多。

二、ArrayList

2.1 ArrayList介绍

ArrayList:是一个可变数组,无参构造默认初始化一个长度为10空间,若是超出,那么会扩容到原来的1.5倍。

原理图:

看场景使用:

  1. 如果是固定不变的则使用数组
  2. 如果是随机的不确定的,在使用ArrayList集合存放。
2.2ArrayList使用

细节:创建StringBuilde 、 String、 ArrayList的对象,打印对象名,都没有看到地址值,都是元素的内容哦!

1. 构造方法: 
		public ArrayList() : 创建一个空的集合容器
		
		
2. 集合容器的创建细节:
		ArrayList list = new ArrayList();
		现象;可以添加任意数据类型
		弊端:数据不严谨

使用格式:

java 复制代码
        // ArrayList的使用
        ArrayList<String> list = new ArrayList<>();
        list.add("泛型限定后只能添加字符串");
        System.out.println(list);   // [泛型限定后只能添加字符串]
  • <数据类型>: 里面写数据类型,jdk7以上在后面的<>中可以为空。

  • 泛型<>:

    <>:中不能出现基本数据类型,想要写其基本数据类型,就得使用包装类(首字母大写就会有提示)

集合练习:

java 复制代码
        // 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)方法
  • 将元素插入到指定的位置上(插队)
  • 返回值为空,有索引必定会出现越界的关系
java 复制代码
        // 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)方法
  • 根据索引号做删除,返回值为被删除的元素。
java 复制代码
        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类型)
java 复制代码
       // 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)方法
  • 修改指定索引号的元素值,返回被覆盖(修改)的值。
java 复制代码
        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)方法
  • 根据索引号获取集合元素,返回索引对应的元素
java 复制代码
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        // 查询(index)方法
        String result = list.get(2);
        System.out.println(result); // 王五
size()方法
  • 返回集合中元素的个数
java 复制代码
        // 查询集合长度方法
        int len = list.size();
        System.out.println(len);    // 3

以上就是集合ArrayList的常用过的增删改查操作了。

2.7 ArrayList集合的小练习
练习一、
java 复制代码
需求:创建一个类型为字符串类型的集合,然后取出每一个元素
java 复制代码
        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));
        }
练习二、
java 复制代码
需求:定义一个字符串类型的集合,然后对字符串长度为4的元素做打印。
java 复制代码
        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);
            }
        }
练习三、
java 复制代码
需求:创建一个存储学生对象的集合,存储三个学生对象,并且打印年龄低于18岁的学生信息

Student类

java 复制代码
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;
    }
}

测试类文件

java 复制代码
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());
            }
        }
    }

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

测试类:

java 复制代码
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);
    }
}

学生类:

java 复制代码
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

练习五、
java 复制代码
需求:创建一个存储String的集合,内部存储(test, 张三, test,test, 李四)字符串
   删除所有的test字符串,删除后,将集合剩余元素打印在控制台
  • 注意点,ArrayList集合是自动收缩的,删除了,会补齐,印象影响引用的指向。

  • 建议,正序清除记得--

  • 反序正常遍历即可。

java 复制代码
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 的学生对象找出

并存入新集合对象,方法返回新集合

java 复制代码
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常用方法总汇

三、学生信息管理系统

需求:完成学生的信息管理(增删改查功能的实现)

根据菜单栏(完成相应的功能);

java 复制代码
            System.out.println("1   添加学生");
            System.out.println("2   删除学生");
            System.out.println("3   修改学生");
            System.out.println("4   查看学生");
            System.out.println("5   退出");

业务逻辑类:

java 复制代码
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数据类:

java 复制代码
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;
    }

}
相关推荐
qq_4419960515 分钟前
Mybatis官方生成器使用示例
java·mybatis
Qter_Sean17 分钟前
自己动手写Qt Creator插件
开发语言·qt
何曾参静谧21 分钟前
「QT」文件类 之 QIODevice 输入输出设备类
开发语言·qt
巨大八爪鱼22 分钟前
XP系统下用mod_jk 1.2.40整合apache2.2.16和tomcat 6.0.29,让apache可以同时访问php和jsp页面
java·tomcat·apache·mod_jk
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
码上一元2 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
计算机-秋大田2 小时前
基于微信小程序的养老院管理系统的设计与实现,LW+源码+讲解
java·spring boot·微信小程序·小程序·vue
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
冰芒猓4 小时前
SpringMVC数据校验、数据格式化处理、国际化设置
开发语言·maven