zoukankan      html  css  js  c++  java
  • Java学习笔记之ArrayList

    0x00 概述

    本文主要涉及Java知识点ArrayList类,并通过简易的学生管理系统进行练习。

    0x01 ArrayList

    1.1 ArrayList类概述

    • 什么是集合

    提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

    • ArrayList集合的特点

    底层是数组实现的,长度可以变化

    • 范型的使用

    用于约束集合中存储元素的数据类型

    1.2 ArrayList类常用方法

    1.2.1 构造方法

    1.2.2 成员方法 

    1.2.3 示例代码 

    package ArrayList;
    
    import java.util.ArrayList;
    
    public class ArrayList02 {
        public static void main(String[] args) {
            // 创建集合
            ArrayList<String> array = new ArrayList<String>();
    
            // 添加元素
            array.add("hello");
            array.add("world");
            array.add("java");
            array.add("hello");
            array.add("world");
            array.add("java");
            System.out.println("array: " + array);
    
            // public boolean remove(Object o): 删除指定元素,返回删除是否成功
            // System.out.println(array.remove("world"));
            // System.out.println(array.remove("javaee"));
    
            // public E remove(int index): 删除指定索引处的元素,返回被删除的元素
            // System.out.println(array.remove(0));
    
            // IndexOutOfBoundsException
            // System.out.println(array.remove(9));
    
            // public E set(int index, E element): 修改指定索引处的元素,返回被修改的元素
            // System.out.println(array.set(0, "javaee"));
            // IndexOutOfBoundsException
            // System.out.println(array.set(12, "javaee"));
    
            // public E get(int index): 返回指定索引处的元素
            System.out.println(array.get(0));
            System.out.println(array.get(2));
            System.out.println(array.get(4));
            System.out.println(array.get(5));
    
            // public int size(): 返回集合中元素的个数
            System.out.println(array.size());
    
    
            System.out.println("array: " + array);
        }
    }

    1.3 ArrayList存储字符串并遍历

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

    示例

    package ArrayList;
    /*
          思路:
              1 创建集合对象
              2 往集合中添加字符串对象
              3 遍历集合,首先要能够获取到集合中的每一个元素与,通过get(int index)方法实现
              4 遍历集合,其次要能获取到集合的长度,通过size()方法实现
              5 遍历集合的通用格式
     */
    
    
    import java.util.ArrayList;
    
    public class ArrayListTest02 {
        public static void main(String[] args) {
            // 创建集合对象
            ArrayList<String> array = new ArrayList<String>();
    
            // 往集合中添加字符串对象
            array.add("刘正风");
            array.add("左冷禅");
            array.add("风清杨");
    
            // 遍集合,其次要能够获取到集合的长度,这个通过size()方法实现
            System.out.println(array.size());
    
            // 遍历集合的通用格式
            for (int i = 0; i < array.size(); i++) {
                String s = array.get(i);
                System.out.println(s);
            }
        }
    }

      

    1.4 ArrayList存储学生对象并遍历

    需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

    示例

    package ArrayList;
    
    public class Student {
        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;
        }
    }
    package ArrayList;
    /*
          思路:
              1 定义学生类
              2 创建集合对象
              3 创建学生对象
              4 添加学生对象到集合中
              5 遍历集合,采用通过遍历格式实现
    
     */
    
    import java.util.ArrayList;
    
    public class ArrayListTest03 {
        public static void main(String[] args) {
    
            // 创建集合对象
            ArrayList<Student> array = new ArrayList<Student>();
    
            // 创建学生对象
            Student s1 = new Student("Alice", 12);
            Student s2 = new Student("Bob", 13);
            Student s3 = new Student("Charlie", 14);
    
            // 添加学生对象到集合中
            array.add(s1);
            array.add(s2);
            array.add(s3);
    
            // 遍历集合,采用通用遍历合适实现
            for (int i = 0; i < array.size(); i++) {
                Student s = array.get(i);
                System.out.println(s.getName() + ", " + s.getAge());
            }
        }
    }

    1.5 ArrayList存储学生对象并遍历升级版

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

    示例

    package com.student2;
    
    /*
        学生类
        为了方便键盘录入,把学生类中的成员变量都定义为String类型
     */
    public class Student {
        private String name;
        private String age;
    
        public Student() {
        }
    
        public Student(String name, String age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    }
    package com.student2;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class ArrayListTest {
        public static void main(String[] args) {
            // 创建集合对象
            ArrayList<Student> array = new ArrayList<Student>();
    
            // 为了提供代码的复用性,我们使用方法来改进程序
            addStudent(array);
            addStudent(array);
            addStudent(array);
    
            // 遍历集合,采用通过遍历格式实现
            for (int i = 0; i < array.size(); i++) {
                Student s = array.get(i);
                System.out.println(s.getName() + ", " + s.getAge());
            }
        }
    
        public static void addStudent(ArrayList<Student> array) {
            // 键盘录入学生信息
            Scanner sc = new Scanner(System.in);
    
            System.out.println("请输入学生姓名: ");
            String name = sc.nextLine();
    
            System.out.println("请输入学生年龄: ");
            String age = sc.nextLine();
    
            // 创建学生对象,把键盘录入的信息赋值给学生对象的成员变量
            Student s = new Student();
            s.setName(name);
            s.setAge(age);
    
            // 往集合中添加学生对象
            array.add(s);
        }
    }

      

    0x02 基于ArrayList实现学生管理系统

    2.1 学生管理系统实现步骤

    需求:

    • 添加学生:通过键盘录入学生信息,将学生添加到学生集合
    • 删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
    • 修改学生:通过键盘录入要修改学生的学号,将该学生对象中的信息进行修改
    • 查看学生:将集合中所有的学生信息进行展示
    • 退出系统:结束程序

    实现步骤:

    1. 定义学生类,包含以下成员变量(为方便录入,成员变量类型均为String)

    private String sid           //学生id
    private String name       //学生姓名
    private String age         // 学生年龄
    private String address   //学生所在地

    2. 学生管理系统主界面的搭建步骤

    • 用输出语句完成主界面的编写
    • 用Scanner实现键盘输入
    • 用Switch语句完成语句选择功能
    • 用循环完成功能结束后再次回到主页面 

    3. 学生管理系统的添加学生功能实现步骤

    • 定义一个方法,接收ArrayList集合
    • 方法内完成添加学生功能
    • 键盘录入学生信息
    • 根据录入信息创建学生对象
    • 将学生对象添加到集合中
    • 提示添加成功信息
    • 在添加学生的选项里调用添加学生的方法

    4. 学生管理系统的查看学生功能实现步骤

    • 定义一个方法,接收ArrayList集合
    • 方法内遍历集合,将学生信息输出
    • 在查看所有学生选项里调用查看学生方法

    5. 学生管理系统的删除学生功能实现步骤

    • 定义一个方法,接收ArrayList集合
    • 方法中接收要删除学生的学号
    • 遍历集合,获取每个学生对象
    • 使用学生对象的学号和录入的要删除的学号进行对比,如果相同,则从当前集合中删除该学生对象
    • 在删除学生选项里调用删除学生方法

    6. 学生管理系统的修改学生功能实现步骤

    • 定义一个方法,接收ArrayList集合
    • 方法中接收要修改学生的学号
    • 通过键盘录入学生对象所需的信息,并创建对象
    • 遍历集合,获取每个学生对象,并和录入的修改学生学号进行比较,如果相同,则使用新学生对象替换当前学生对象
    • 在修改学生选项中调用修改学生的方法

    2.2 学生类的定义 

    package com.Student3;
    
    public class Student {
        // 学号
        private String sid;
        // 姓名
        private String name;
        // 年龄
        private String age;
        // 居住地
        private String address;
    
        public Student() {
        }
    
        public Student(String sid, String name, String age, String address) {
            this.sid = sid;
            this.name = name;
            this.age = age;
            this.address = address;
        }
    
        public String getSid() {
            return sid;
        }
    
        public void setSid(String sid) {
            this.sid = sid;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }

    2.3 测试类的定义

    package com.Student3;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class StudentManager {
        /*
            1 用输出语句打印主页面的选项
            2 用Scanner实现键盘录入
            3 用switch语句完成操作的选择
            4 用循环完成再次回到主页面
         */
        public static void main(String[] args) {
            // 创建集合对象,用于保存学生数据
            ArrayList<Student> arr = new ArrayList<Student>();
    
            // 用循环完成再次回到主页面
            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);
                String choice = sc.nextLine();
    
                switch (choice) {
                    case "1":
                        addStudent(arr);
                        break;
                    case "2":
                        deleteStudent(arr);
                        break;
                    case "3":
                        updateStudent(arr);
                        break;
                    case "4":
                        findAllStudent(arr);
                        break;
                    case "5":
                        System.out.println("谢谢使用,再见~");
                        System.exit(0); // JVM退出,程序结束
                }
            }
        }
    
        // 添加学生信息
        public static void addStudent(ArrayList<Student> arr) {
            // 键盘录入学生信息
            Scanner sc = new Scanner(System.in);
    
            String sid;
    
            while (true) {
                System.out.println("请输入学生学号:");
                sid = sc.nextLine();
    
                boolean flag = isUsed(arr, sid);
                if (flag) {
                    System.out.println("您输入的学号已被占用,清重新输入 >> ");
                } else {
                    break;
                }
            }
    
            System.out.println("请输入学生姓名:");
            String name = sc.nextLine();
    
            System.out.println("请输入学生年龄:");
            String age = sc.nextLine();
    
            System.out.println("请输入学生所在地: ");
            String address = sc.nextLine();
    
            // 创建学生对象
            Student s = new Student();
            s.setSid(sid);
            s.setName(name);
            s.setAge(age);
            s.setAddress(address);
    
            // 将学生对象添加到集合中
            arr.add(s);
    
            // 给出添加成功提示
            System.out.println("添加学生成功");
        }
    
        // 判断学号是否被使用
        public static boolean isUsed(ArrayList<Student> arr, String sid) {
            // 输入的学号和集合中的学生学号相同,返回true,不相同,返回false
            boolean flag = false;
    
            for (int i = 0; i < arr.size(); i++) {
                Student s = arr.get(i);
                if (sid.equals(s.getSid())) {
                    flag = true;
                    break;
                }
            }
            return flag;
        }
    
        // 查看学生信息
        public static void findAllStudent(ArrayList<Student> arr) {
            if (arr.size() == 0) {
                System.out.println("暂无学生信息,请先添加信息再查询。");
                // 退出该方法
                return;
            }
            // 显示表头信息   \t 是一个tab键
            System.out.println("学号\t\t\t姓名\t\t\t年龄\t\t\t居住地");
    
            // 将集合中数据取出来按照格式显示
            for (int i = 0; i < arr.size(); i++) {
                Student s = arr.get(i);
                System.out.println(s.getSid() + "\t\t\t" + s.getName() + "\t\t\t" + s.getAge() + "\t\t\t" + s.getAddress());
            }
        }
    
        // 删除学生信息
        public static void deleteStudent(ArrayList<Student> arr) {
            // 键盘录入要删除的学生的学号
            Scanner sc = new Scanner(System.in);
    
            System.out.println("请输入要删除学生的学号: ");
            String sid = sc.nextLine();
    
            /*
                在删除操作前,需要确认学号是否存在
                如果不存在,显示提示信息
                如果存在,执行删除
             */
            int index = -1;
            for (int i = 0; i < arr.size(); i++) {
                Student s = arr.get(i);
                if (sid.equals(s.getSid())) {
                    index = i;
                    break;
                }
            }
    
            if (index == -1) {
                System.out.println("该学生学号不存在,清重新输入: ");
            } else {
                arr.remove(index);
                // 给出删除成功提示
                System.out.println("删除学生成功");
            }
        }
    
        // 修改学生信息
        public static void updateStudent(ArrayList<Student> arr) {
            // 键盘录入学生学号
            Scanner sc = new Scanner(System.in);
    
            System.out.println("请输入要修改的学生学号: ");
            String sid = sc.nextLine();
    
            // 键盘录入要修改的学生信息
            System.out.println("请输入学生姓名: ");
            String name = sc.nextLine();
            System.out.println("请输入学生年龄: ");
            String age = sc.nextLine();
            System.out.println("请输入学生所在地: ");
            String address = sc.nextLine();
    
            // 根据输入的信息,创建新的学生对象
            Student s = new Student();
            s.setSid(sid);
            s.setName(name);
            s.setAge(age);
            s.setAddress(address);
    
            // 遍历集合修改对应的学生信息
            for (int i = 0; i < arr.size(); i++) {
                Student s_tmp = arr.get(i);
                if (sid.equals(s_tmp.getSid())) {
                    arr.set(i, s);
                }
            }
            // 给出修改成功提示
            System.out.println("修改学生成功");
        }
    }
  • 相关阅读:
    Windows 服务多语言化时读取配置文件失败的问题。
    从开始界面卸载Windows服务时,不小心点击了 取消,此后再次卸载会卸载不掉
    从数据库导出数据时,有的字段是时间,不同的时间向在窗口中去掉时用正则表达式匹配找到不同的时间
    C#使用ManagementObjectSearcher来获取系统信息时会有out of memory的异常
    C# TreeView设置SelectedNode设置无效的问题
    C#判断ListBox是否显示了水平滚动条/横向滚动条
    Jmeter运行不显示cmd对话框
    监控Linux系统所选的服务所占进程内存占用
    Linux的date用法
    shell的循环嵌套语法
  • 原文地址:https://www.cnblogs.com/JetpropelledSnake/p/15574318.html
Copyright © 2011-2022 走看看