首頁技術文章正文

Java集合arraylist介紹

更新時間:2020-08-14 來源:黑馬程序員 瀏覽量:

1、圍觀某學生管理系統(tǒng)

大伙兒快來看這個學生管理系統(tǒng)啊,竟然還在使用數(shù)組來存儲學生信息數(shù)據(jù),太low了吧。增加學生數(shù)量還要不停地新建數(shù)組,看來一定是不知道數(shù)組的長度是不可以改變的,是不是應該吐槽一下,來我們一起喊,小菜雞~。我們自己來實現(xiàn)一個比較牛學生管理系統(tǒng)。

2、了解集合與數(shù)組

來我們來普及一下數(shù)組的最基本概念,數(shù)組是可以用來存儲相同數(shù)據(jù)類型的數(shù)據(jù)的一種容器,數(shù)組一經(jīng)創(chuàng)建長度是固定的。如果需要改變長度,需要重新創(chuàng)建,不適合在對象數(shù)量未知的情況下使用的。 那么我們應該使用什么容器可以在未知數(shù)量情況下使用呢?那是不是有一種存儲空間可變的存儲模型,存儲的數(shù)據(jù)容量可以發(fā)生改變的容器?一定有的啊,它就是ArrayList集合,長度可以發(fā)生改變,可以在未知數(shù)量的情況下使用,這樣的容器它不香嗎?嗯,香~,那我們一起學習一下它的使用吧。

3、集合的常用方法

3.1 構造方法

方法名說明
public ArrayList()創(chuàng)建一個空的集合對象


代碼演示:

public class TestArrayList{
    public static void main(String[] args){
        // 創(chuàng)建一個集合對象
        ArrayList<String> list = new ArryaList<String>();
        /*
        	泛型的使用:<String> 用來約束集合中存儲的數(shù)據(jù)類型 
        	比如:int[] arr = new int[5];  int類型的數(shù)組,可以想到存儲的是int類型的數(shù)據(jù)
        	ArrayList<String> list; <String>可以想到存儲的是String類型的數(shù)據(jù)
        	jdk1.7之后new ArryaList<String>();后面的這個尖括號中的String可以不寫
        */
    }
}


3.2 成員方法

方法名說明
public boolean   remove(Object o)刪除指定的元素,返回刪除是否成功
public E   remove(int   index)刪除指定索引處的元素,返回被刪除的元素
public E   set(int index,E   element)修改指定索引處的元素,返回被修改的元素
public E   get(int   index)返回指定索引處的元素
public int   size()返回集合中的元素的個數(shù)
public boolean   add(E e)將指定的元素追加到此集合的末尾
public void   add(int index,E   element)在此集合中的指定位置插入指定的元素


代碼演示:

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

        // 添加元素
        array.add("hello");
        array.add("world");
        array.add("java");

        // 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(1));

        // 發(fā)生索引越界異常 IndexOutOfBoundsException
        System.out.println(array.remove(3));

        // public E set(int index,E element):修改指定索引處的元素,返回被修改的元素
        System.out.println(array.set(1,"javaee"));

        // 發(fā)生索引越界異常 IndexOutOfBoundsException
        System.out.println(array.set(3,"javaee"));

        // public E get(int index):返回指定索引處的元素
        System.out.println(array.get(0));
        System.out.println(array.get(1));
        System.out.println(array.get(2));

        // public int size():返回集合中的元素的個數(shù)
        System.out.println(array.size());

        // 輸出集合
        System.out.println("array:" + array);
    }
}

注意:集合是不可以存儲基本數(shù)據(jù)類型的數(shù)據(jù),只能存儲引用數(shù)據(jù)類型的數(shù)據(jù)。


4、ArrayList存儲字符串并遍歷

4.1 演示案例需求

創(chuàng)建一個存儲字符串的集合,存儲3個字符串元素,使用程序實現(xiàn)在控制臺遍歷該集合。

代碼演示:

/*
    思路:
        1:創(chuàng)建集合對象
        2:往集合中添加字符串對象
        3:遍歷集合,首先要能夠獲取到集合中的每一個元素,這個通過get(int index)方法實現(xiàn)
        4:遍歷集合,其次要能夠獲取到集合的長度,這個通過size()方法實現(xiàn)
        5:遍歷集合的通用格式
 */
public class TestArrayList{
    public static void main(String[] args) {
        //創(chuàng)建集合對象
        ArrayList<String> array = new ArrayList<String>();

        //往集合中添加字符串對象
        array.add("林青霞");
        array.add("朱茵");
        array.add("王祖賢");

        //遍歷集合,其次要能夠獲取到集合的長度,這個通過size()方法實現(xiàn)
//        System.out.println(array.size());

        //遍歷集合的通用格式
        for(int i=0; i<array.size(); i++) {
            String s = array.get(i);
            System.out.println(s);
        }
    }
}

5、ArrayList存儲學生對象并遍歷

5.1 演示案例需求

創(chuàng)建一個存儲學生對象的集合,存儲3個學生對象,使用程序實現(xiàn)在控制臺遍歷該集合。

代碼演示:

/*
    思路:
        1:定義學生類
        2:創(chuàng)建集合對象
        3:創(chuàng)建學生對象
        4:添加學生對象到集合中
        5:遍歷集合,采用通用遍歷格式實現(xiàn)
 */
public class TestArrayList {
    public static void main(String[] args) {
        //創(chuàng)建集合對象
        ArrayList<Student> array = new ArrayList<>();

        //創(chuàng)建學生對象
        Student s1 = new Student("林青霞", 30);
        Student s2 = new Student("朱茵", 33);
        Student s3 = new Student("張曼玉", 18);

        //添加學生對象到集合中
        array.add(s1);
        array.add(s2);
        array.add(s3);

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

//定義學生類
public class Student{
    // 私有化屬性
    private String name;
    private int age;
    // 提供構造方法
    public Student(){
        
    }
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
    // 提供get、set方法
    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;
    }
    
}


6、顯而易見的好處

我們在最后一個案例中,用來存儲對象信息,是不是完全OK,效果顯而易見。如果再繼續(xù)增加學員信息個數(shù),是不是可以隨便增加。那我們在單獨編寫學員管理系統(tǒng),可以直接使用ArrayList集合來代替數(shù)組的使用,是不是很方便我們。來我們演示一下:

7、自己來實現(xiàn)學生管理系統(tǒng)

7.1 演示步驟:

案例需求

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

添加學生:通過鍵盤錄入學生信息,添加到集合中

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

修改學生:通過鍵盤錄入要修改學生的學號,將該學生對象其他信息進行修改

查看學生:將集合中的學生對象信息進行展示

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

實現(xiàn)步驟:

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

private String sid // 學生id

private String name // 學生姓名

private String age // 學生年齡

private String address // 學生所在地

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

2.1 用輸出語句完成主界面的編寫

2.2 用Scanner實現(xiàn)鍵盤輸入

2.3 用switch語句完成選擇的功能

2.4 用循環(huán)完成功能結束后再次回到主界面

3. 學生管理系統(tǒng)的添加學生功能實現(xiàn)步驟

3.1 定義一個方法,接收ArrayList集合

3.2 方法內完成添加學生的功能

①鍵盤錄入學生信息

②根據(jù)錄入的信息創(chuàng)建學生對象

③將學生對象添加到集合中

④提示添加成功信息

3.3 在添加學生的選項里調用添加學生的方法

4. 學生管理系統(tǒng)的查看學生功能實現(xiàn)步驟

4.1 定義一個方法,接收ArrayList集合

4.2 方法內遍歷集合,將學生信息進行輸出

4.3 在查看所有學生選項里調用查看學生方法

5. 學生管理系統(tǒng)的刪除學生功能實現(xiàn)步驟

5.1 定義一個方法,接收ArrayList集合

5.2 方法中接收要刪除學生的學號

5.3 遍歷集合,獲取每個學生對象

5.4 使用學生對象的學號和錄入的要刪除的學號進行比較,如果相同,則將當前學生對象從集合中刪除

5.5 在刪除學生選項里調用刪除學生的方法

6. 學生管理系統(tǒng)的修改學生功能實現(xiàn)步驟

6.1 定義一個方法,接收ArrayList集合

6.2 方法中接收要修改學生的學號

6.3 通過鍵盤錄入學生對象所需的信息,并創(chuàng)建對象

6.4 遍歷集合,獲取每一個學生對象。并和錄入的修改學生學號進行比較.如果相同,則使用新學生對象替換當前學生對象:

6.5 在修改學生選項里調用修改學生的方法

7. 退出系統(tǒng)

使用外層循環(huán)添加標記,終止系統(tǒng)。

7.2 實現(xiàn)代碼:

// 定義學生類
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;
    }
}


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

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

            //用Scanner實現(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("謝謝使用");
                    break wc:  // 根據(jù)標記終止系統(tǒng)
            }
        }
    }

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

        String sid;

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

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

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

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

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

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

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

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

    //定義一個方法,判斷學號是否被使用
    public static boolean isUsed(ArrayList<Student> array, String sid) {
        //如果與集合中的某一個學生學號相同,返回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;
    }


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

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

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

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

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

        //在刪除/修改學生操作前,對學號是否存在進行判斷
        //如果不存在,顯示提示信息
        //如果存在,執(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("刪除學生成功");
        }
    }

    //定義一個方法,用于修改學生信息
    public static void updateStudent(ArrayList<Student> array) {
        //修改之前判斷學號是否存在
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入要修改的學號:");
        String sid = scanner.nextLine();
        //先判斷是否存在
        boolean flag = isUsed(array, sid);
        if(flag){
            System.out.println("你輸入的學號不存在,請確認后修改!");
            return;
        }else {
            System.out.println("請輸入姓名:");
            String name = scanner.nextLine();
            System.out.println("請輸入年齡:");
            String age = scanner.nextLine();
            System.out.println("請輸入居住地:");
            String address = scanner.nextLine();
            //創(chuàng)建對象
            Student student = new Student(sid,name,age,address);
            //得到索引然后修改
            for (int i = 0; i < array.size(); i++) {
                Student s = array.get(i);
                if (s.getSid().equals(sid)) {
                    array.set(i,student);
                }
            }
        }
        System.out.println("修改成功!");
}


8、總結

好了,我們自己的學生管理系統(tǒng)實現(xiàn)了,是不是比使用數(shù)組來實現(xiàn)的效果好多了,更加的優(yōu)雅啊。大家要自己學會使用這么好用的ArrayList集合哦。


猜你喜歡:

ArrayList類概述和ArrayList類常用方法

ArrayList集合詳解

LinkedList和ArrayList對比各有什么優(yōu)勢?

Java高級軟件測試工程師培訓

分享到:
在線咨詢 我要報名
和我們在線交談!