JavaSE第09篇:API之ArrayList及綜合案例

本篇我們將學(xué)習(xí)一個(gè)集合類之ArrayList類,該類可以使我們對一組元素輕松的實(shí)現(xiàn)增刪改查。在實(shí)際開發(fā)中,我們開發(fā)的任何項(xiàng)目,最基本的操作就是增刪改查。所以本篇我們也將會通過一個(gè)簡單的綜合案例之學(xué)生管理系統(tǒng),體會一下項(xiàng)目中最基本的操作增刪改查。

第一章:ArrayList

1.1-為什么要學(xué)習(xí)ArrayList(了解)

我們看一個(gè)簡單的需求:有一組數(shù)據(jù)(如:學(xué)生姓名),向這一組數(shù)據(jù)中繼續(xù)添加數(shù)據(jù),添加個(gè)數(shù)不確定。

對于一組數(shù)據(jù),我們可能首先想到的是數(shù)組。用數(shù)組存儲一組字符串,這個(gè)數(shù)組的長度是固定的,但是未來添加的個(gè)數(shù)是不確定的,所以數(shù)組有一定的局限性,并且對于數(shù)組中元素的操作(增刪改查)相對比較麻煩,并沒有直接的API方法讓我們快速實(shí)現(xiàn)對數(shù)組元素的增刪改查。

好消息是java中提供了一個(gè)新的集合類,這個(gè)集合類的長度是動態(tài)變化的,并且提供了API方法,能讓我們快速實(shí)現(xiàn)對一組元素的增刪改查。這個(gè)類就是ArrayList

1.2-ArrayList概述(了解)

ArrayList是一種集合,是大小可變的數(shù)組的實(shí)現(xiàn),存儲在內(nèi)的數(shù)據(jù)稱為元素。此類提供一些方法來操作內(nèi)部存儲

的元素。 ArrayList 中可不斷添加元素,其大?。祥L度)也自動增長。

1.3-創(chuàng)建ArrayList(記憶)

導(dǎo)包:java.util.ArrayList;

創(chuàng)建方式1:ArrayList<E> 變量名 = new ArrayList<>()

創(chuàng)建方式2:ArrayList<E> 變量名 = new ArrayList()

  • E 表示集合中未來要存放的數(shù)據(jù)類型,比如存放一組字符串,就是ArrayList<String>
import java.util.ArrayList;

public class Test08 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
    }
}

1.4-操作ArrayList(記憶)

常用的成員方法

image-20200722150520729.png

代碼

import java.util.ArrayList;

public class Test08 {
    public static void main(String[] args) {
        // 創(chuàng)建集合,可以存儲一組字符串
        ArrayList<String> list = new ArrayList<>();
        // 添加元素
        list.add("張三");
        list.add("李四");
        System.out.println(list.toString());  //輸出結(jié)果:[張三, 李四]
        // 向索引為1的位置添加元素
        list.add(1,"小三");
        System.out.println(list.toString()); // 輸出結(jié)果:[張三, 小三, 李四]
        // 輸出集合的長度
        System.out.println(list.size());     // 輸出結(jié)果:3
        // 獲取索引為1的元素
        System.out.println(list.get(1));     // 輸出結(jié)果:小三
        // 設(shè)置索引為1的元素為“王五”
        list.set(1,"王五");
        System.out.println(list.toString()); // 輸出結(jié)果:[張三, 王五, 李四]
        // 移除
        list.remove("王五");
        System.out.println(list.toString()); // 輸出結(jié)果:[張三, 李四]
        // 遍歷(for循環(huán)遍歷)
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }


    }
}

第二章:案例

2.1-案例1(練習(xí))

需求:

創(chuàng)建一個(gè)存儲學(xué)生對象的集合,存儲3個(gè)學(xué)生對象,使用程序?qū)崿F(xiàn)在控制臺遍歷該集合。

學(xué)生信息有姓名和年齡。

分析:

/*
    思路:
        1:定義學(xué)生類
        2:創(chuàng)建集合對象
        3:創(chuàng)建學(xué)生對象
        4:添加學(xué)生對象到集合中
        5:遍歷集合,采用通用遍歷格式實(shí)現(xiàn)
 */

代碼

學(xué)生類Student

package www.penglei666.com.demo01;

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

}

操作測試類StudentManger

package www.penglei666.com.demo01;

import java.util.ArrayList;

public class StudentManger {
    public static void main(String[] args) {
        // 創(chuàng)建集合
        ArrayList<Student> list = new ArrayList<>();
        // 創(chuàng)建學(xué)生對象
        Student stu1 = new Student("張三",10);
        Student stu2= new Student("李四",12);
        Student stu3 = new Student("王五",11);
        // 向集合中添加元素
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        // 遍歷集合
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println(stu.getName() + "," + stu.getAge());
        }
    }
}

2.2-案例2(練習(xí))

需求:

創(chuàng)建一個(gè)存儲學(xué)生對象的集合,存儲3個(gè)學(xué)生對象,使用程序?qū)崿F(xiàn)在控制臺遍歷該集合

學(xué)生的姓名和年齡來自于鍵盤錄入。

分析:

/*
    思路:
        1:定義學(xué)生類,為了鍵盤錄入數(shù)據(jù)方便,把學(xué)生類中的成員變量都定義為String類型
        2:創(chuàng)建集合對象
        3:鍵盤錄入學(xué)生對象所需要的數(shù)據(jù)
        4:創(chuàng)建學(xué)生對象,把鍵盤錄入的數(shù)據(jù)賦值給學(xué)生對象的成員變量
        5:往集合中添加學(xué)生對象
        6:遍歷集合,采用通用遍歷格式實(shí)現(xiàn)
 */

代碼

學(xué)生類同上案例1

操作測試類

public class StudentManger {
    public static void main(String[] args) {
        //創(chuàng)建集合對象
        ArrayList<Student> array = new ArrayList<Student>();

        //為了提高代碼的復(fù)用性,我們用方法來改進(jìn)程序
        addStudent(array);
        addStudent(array);
        addStudent(array);

        //遍歷集合,采用通用遍歷格式實(shí)現(xiàn)
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }
    }

    /*
        兩個(gè)明確:
            返回值類型:void
            參數(shù):ArrayList<Student> array
     */
    public static void addStudent(ArrayList<Student> array) {
        //鍵盤錄入學(xué)生對象所需要的數(shù)據(jù)
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入學(xué)生姓名:");
        String name = sc.nextLine();

        System.out.println("請輸入學(xué)生年齡:");
        String age = sc.nextLine();

        //創(chuàng)建學(xué)生對象,把鍵盤錄入的數(shù)據(jù)賦值給學(xué)生對象的成員變量
        Student s = new Student();
        s.setName(name);
        s.setAge(age);

        //往集合中添加學(xué)生對象
        array.add(s);
    }
}

2.3-學(xué)生信息管理系統(tǒng)(綜合練習(xí))

需求:

針對目前我們的所學(xué)內(nèi)容,完成一個(gè)綜合案例:學(xué)生管理系統(tǒng)!該系統(tǒng)主要功能如下:

  • 添加學(xué)生:通過鍵盤錄入學(xué)生信息,添加到集合中

  • 刪除學(xué)生:通過鍵盤錄入要刪除學(xué)生的學(xué)號,將該學(xué)生對象從集合中刪除

  • 修改學(xué)生:通過鍵盤錄入要修改學(xué)生的學(xué)號,將該學(xué)生對象其他信息進(jìn)行修改

  • 查看學(xué)生:將集合中的學(xué)生對象信息進(jìn)行展示

  • 退出系統(tǒng):結(jié)束程序

實(shí)現(xiàn)步驟:

  1. 定義學(xué)生類,包含以下成員變量

    • private String sid // 學(xué)生id

    • private String name // 學(xué)生姓名

    • private String age // 學(xué)生年齡

    • private String address // 學(xué)生所在地

  2. 學(xué)生管理系統(tǒng)主界面的搭建步驟

    • 2.1 用輸出語句完成主界面的編寫
    • 2.2 用Scanner實(shí)現(xiàn)鍵盤輸入
    • 2.3 用switch語句完成選擇的功能
    • 2.4 用循環(huán)完成功能結(jié)束后再次回到主界面
  3. 學(xué)生管理系統(tǒng)的添加學(xué)生功能實(shí)現(xiàn)步驟

    • 3.1 定義一個(gè)方法,接收ArrayList<Student>集合
    • 3.2 方法內(nèi)完成添加學(xué)生的功能
      • ①鍵盤錄入學(xué)生信息
      • ②根據(jù)錄入的信息創(chuàng)建學(xué)生對象
      • ③將學(xué)生對象添加到集合中
      • ④提示添加成功信息
    • 3.3 在添加學(xué)生的選項(xiàng)里調(diào)用添加學(xué)生的方法
  4. 學(xué)生管理系統(tǒng)的查看學(xué)生功能實(shí)現(xiàn)步驟

    • 4.1 定義一個(gè)方法,接收ArrayList<Student>集合
    • 4.2 方法內(nèi)遍歷集合,將學(xué)生信息進(jìn)行輸出
    • 4.3 在查看所有學(xué)生選項(xiàng)里調(diào)用查看學(xué)生方法
  5. 學(xué)生管理系統(tǒng)的刪除學(xué)生功能實(shí)現(xiàn)步驟

    • 5.1 定義一個(gè)方法,接收ArrayList<Student>集合
    • 5.2 方法中接收要刪除學(xué)生的學(xué)號
    • 5.3 遍歷集合,獲取每個(gè)學(xué)生對象
    • 5.4 使用學(xué)生對象的學(xué)號和錄入的要刪除的學(xué)號進(jìn)行比較,如果相同,則將當(dāng)前學(xué)生對象從集合中刪除
    • 5.5 在刪除學(xué)生選項(xiàng)里調(diào)用刪除學(xué)生的方法
  6. 學(xué)生管理系統(tǒng)的修改學(xué)生功能實(shí)現(xiàn)步驟

    • 6.1 定義一個(gè)方法,接收ArrayList<Student>集合
    • 6.2 方法中接收要修改學(xué)生的學(xué)號
    • 6.3 通過鍵盤錄入學(xué)生對象所需的信息,并創(chuàng)建對象
    • 6.4 遍歷集合,獲取每一個(gè)學(xué)生對象。并和錄入的修改學(xué)生學(xué)號進(jìn)行比較.如果相同,則使用新學(xué)生對象替換當(dāng)前學(xué)生對象
    • 6.5 在修改學(xué)生選項(xiàng)里調(diào)用修改學(xué)生的方法
  7. 退出系統(tǒng)

    • 使用System.exit(0);退出JVM

代碼

學(xué)生類:Student

public class Student {
    //學(xué)號
    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;
    }
}

操作測試類:StudentManger

package www.penglei666.com.demo02;

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

public class StudentManger {
    /*
        1:用輸出語句完成主界面的編寫
        2:用Scanner實(shí)現(xiàn)鍵盤錄入數(shù)據(jù)
        3:用switch語句完成操作的選擇
        4:用循環(huán)完成再次回到主界面
    */
    public static void main(String[] args) {
        //創(chuàng)建集合對象,用于保存學(xué)生數(shù)據(jù)信息
        ArrayList<Student> array = new ArrayList<Student>();

        //用循環(huán)完成再次回到主界面
        while (true) {
            //用輸出語句完成主界面的編寫
            System.out.println("--------歡迎來到學(xué)生管理系統(tǒng)--------");
            System.out.println("1 添加學(xué)生");
            System.out.println("2 刪除學(xué)生");
            System.out.println("3 修改學(xué)生");
            System.out.println("4 查看所有學(xué)生");
            System.out.println("5 退出");
            System.out.println("請輸入你的選擇:");

            //用Scanner實(shí)現(xiàn)鍵盤錄入數(shù)據(jù)
            Scanner sc = new Scanner(System.in);
            String line = sc.nextLine();

            //用switch語句完成操作的選擇
            switch (line) {
                case "1":
                    addStudent(array);
                    break;
                case "2":
                    deleteStudent(array);
                    break;
                case "3":
                    updateStudent(array);
                    break;
                case "4":
                    findAllStudent(array);
                    break;
                case "5":
                    System.out.println("謝謝使用");
                    System.exit(0); //JVM退出
            }
        }
    }

    //定義一個(gè)方法,用于添加學(xué)生信息
    public static void addStudent(ArrayList<Student> array) {
        //鍵盤錄入學(xué)生對象所需要的數(shù)據(jù),顯示提示信息,提示要輸入何種信息
        Scanner sc = new Scanner(System.in);

        String sid;

        while (true) {
            System.out.println("請輸入學(xué)生學(xué)號:");
            sid = sc.nextLine();

            boolean flag = isUsed(array, sid);
            if (flag) {
                System.out.println("你輸入的學(xué)號已經(jīng)被占用,請重新輸入");
            } else {
                break;
            }
        }

        System.out.println("請輸入學(xué)生姓名:");
        String name = sc.nextLine();

        System.out.println("請輸入學(xué)生年齡:");
        String age = sc.nextLine();

        System.out.println("請輸入學(xué)生居住地:");
        String address = sc.nextLine();

        //創(chuàng)建學(xué)生對象,把鍵盤錄入的數(shù)據(jù)賦值給學(xué)生對象的成員變量
        Student s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //將學(xué)生對象添加到集合中
        array.add(s);

        //給出添加成功提示
        System.out.println("添加學(xué)生成功");
    }

    //定義一個(gè)方法,判斷學(xué)號是否被使用
    public static boolean isUsed(ArrayList<Student> array, String sid) {
        //如果與集合中的某一個(gè)學(xué)生學(xué)號相同,返回true;如果都不相同,返回false
        boolean flag = false;

        for(int i=0; i<array.size(); i++) {
            Student s = array.get(i);
            if(s.getSid().equals(sid)) {
                flag = true;
                break;
            }
        }

        return flag;
    }


    //定義一個(gè)方法,用于查看學(xué)生信息
    public static void findAllStudent(ArrayList<Student> array) {
        //判斷集合中是否有數(shù)據(jù),如果沒有顯示提示信息
        if (array.size() == 0) {
            System.out.println("無信息,請先添加信息再查詢");
            //為了讓程序不再往下執(zhí)行,我們在這里寫上return;
            return;
        }

        //顯示表頭信息
        //\t其實(shí)是一個(gè)tab鍵的位置
        System.out.println("學(xué)號\t\t\t姓名\t\t\t年齡\t\t\t居住地");

        //將集合中數(shù)據(jù)取出按照對應(yīng)格式顯示學(xué)生信息,年齡顯示補(bǔ)充“歲”
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getSid() + "\t\t\t" + s.getName() + "\t\t\t" + s.getAge() + "歲\t\t\t" + s.getAddress());
        }
    }

    //定義一個(gè)方法,用于刪除學(xué)生信息
    public static void deleteStudent(ArrayList<Student> array) {
        //鍵盤錄入要刪除的學(xué)生學(xué)號,顯示提示信息
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入你要刪除的學(xué)生的學(xué)號:");
        String sid = sc.nextLine();

        //在刪除/修改學(xué)生操作前,對學(xué)號是否存在進(jìn)行判斷
        //如果不存在,顯示提示信息
        //如果存在,執(zhí)行刪除/修改操作

        int index = -1;

        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            if (s.getSid().equals(sid)) {
                index = i;
                break;
            }
        }

        if (index == -1) {
            System.out.println("該信息不存在,請重新輸入");
        } else {
            array.remove(index);
            //給出刪除成功提示
            System.out.println("刪除學(xué)生成功");
        }
    }

    //定義一個(gè)方法,用于修改學(xué)生信息
    public static void updateStudent(ArrayList<Student> array) {
        //鍵盤錄入要修改的學(xué)生學(xué)號,顯示提示信息
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入你要修改的學(xué)生的學(xué)號:");
        String sid = sc.nextLine();

        //鍵盤錄入要修改的學(xué)生信息
        System.out.println("請輸入學(xué)生新姓名:");
        String name = sc.nextLine();
        System.out.println("請輸入學(xué)生新年齡:");
        String age = sc.nextLine();
        System.out.println("請輸入學(xué)生新居住地:");
        String address = sc.nextLine();

        //創(chuàng)建學(xué)生對象
        Student s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //遍歷集合修改對應(yīng)的學(xué)生信息
        for (int i = 0; i < array.size(); i++) {
            Student student = array.get(i);
            if (student.getSid().equals(sid)) {
                array.set(i, s);
            }
        }

        //給出修改成功提示
        System.out.println("修改學(xué)生成功");
    }
}
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容