首页技术文章正文

Java集合arraylist介绍

更新时间:2020-08-14 来源:黑马程序员 浏览量:

1、围观某学生管理系统

大伙儿快来看这个学生管理系统啊,竟然还在使用数组来存储学生信息数据,太low了吧。增加学生数量还要不停地新建数组,看来一定是不知道数组的长度是不可以改变的,是不是应该吐槽一下,来我们一起喊,小菜鸡~。我们自己来实现一个比较牛学生管理系统。

2、了解集合与数组

来我们来普及一下数组的最基本概念,数组是可以用来存储相同数据类型的数据的一种容器,数组一经创建长度是固定的。如果需要改变长度,需要重新创建,不适合在对象数量未知的情况下使用的。 那么我们应该使用什么容器可以在未知数量情况下使用呢?那是不是有一种存储空间可变的存储模型,存储的数据容量可以发生改变的容器?一定有的啊,它就是ArrayList集合,长度可以发生改变,可以在未知数量的情况下使用,这样的容器它不香吗?嗯,香~,那我们一起学习一下它的使用吧。

3、集合的常用方法

3.1 构造方法

方法名说明
public ArrayList()创建一个空的集合对象


代码演示:

public class TestArrayList{
    public static void main(String[] args){
        // 创建一个集合对象
        ArrayList<String> list = new ArryaList<String>();
        /*
        	泛型的使用:<String> 用来约束集合中存储的数据类型 
        	比如:int[] arr = new int[5];  int类型的数组,可以想到存储的是int类型的数据
        	ArrayList<String> list; <String>可以想到存储的是String类型的数据
        	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()返回集合中的元素的个数
public boolean   add(E e)将指定的元素追加到此集合的末尾
public void   add(int index,E   element)在此集合中的指定位置插入指定的元素


代码演示:

public class TestArrayList{
    public static void main(String[] args) {
        // 创建集合
        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));

        // 发生索引越界异常 IndexOutOfBoundsException
        System.out.println(array.remove(3));

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

        // 发生索引越界异常 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():返回集合中的元素的个数
        System.out.println(array.size());

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

注意:集合是不可以存储基本数据类型的数据,只能存储引用数据类型的数据。


4、ArrayList存储字符串并遍历

4.1 演示案例需求

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

代码演示:

/*
    思路:
        1:创建集合对象
        2:往集合中添加字符串对象
        3:遍历集合,首先要能够获取到集合中的每一个元素,这个通过get(int index)方法实现
        4:遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
        5:遍历集合的通用格式
 */
public class TestArrayList{
    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);
        }
    }
}

5、ArrayList存储学生对象并遍历

5.1 演示案例需求

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

代码演示:

/*
    思路:
        1:定义学生类
        2:创建集合对象
        3:创建学生对象
        4:添加学生对象到集合中
        5:遍历集合,采用通用遍历格式实现
 */
public class TestArrayList {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<Student> array = new ArrayList<>();

        //创建学生对象
        Student s1 = new Student("林青霞", 30);
        Student s2 = new Student("朱茵", 33);
        Student s3 = new Student("张曼玉", 18);

        //添加学生对象到集合中
        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());
        }
    }
}

//定义学生类
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,效果显而易见。如果再继续增加学员信息个数,是不是可以随便增加。那我们在单独编写学员管理系统,可以直接使用ArrayList集合来代替数组的使用,是不是很方便我们。来我们演示一下:

7、自己来实现学生管理系统

7.1 演示步骤:

案例需求

针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:

添加学生:通过键盘录入学生信息,添加到集合中

删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除

修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改

查看学生:将集合中的学生对象信息进行展示

退出系统:结束程序

实现步骤:

1. 定义学生类,包含以下成员变量

private String sid // 学生id

private String name // 学生姓名

private String age // 学生年龄

private String address // 学生所在地

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

2.1 用输出语句完成主界面的编写

2.2 用Scanner实现键盘输入

2.3 用switch语句完成选择的功能

2.4 用循环完成功能结束后再次回到主界面

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

3.1 定义一个方法,接收ArrayList集合

3.2 方法内完成添加学生的功能

①键盘录入学生信息

②根据录入的信息创建学生对象

③将学生对象添加到集合中

④提示添加成功信息

3.3 在添加学生的选项里调用添加学生的方法

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

4.1 定义一个方法,接收ArrayList集合

4.2 方法内遍历集合,将学生信息进行输出

4.3 在查看所有学生选项里调用查看学生方法

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

5.1 定义一个方法,接收ArrayList集合

5.2 方法中接收要删除学生的学号

5.3 遍历集合,获取每个学生对象

5.4 使用学生对象的学号和录入的要删除的学号进行比较,如果相同,则将当前学生对象从集合中删除

5.5 在删除学生选项里调用删除学生的方法

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

6.1 定义一个方法,接收ArrayList集合

6.2 方法中接收要修改学生的学号

6.3 通过键盘录入学生对象所需的信息,并创建对象

6.4 遍历集合,获取每一个学生对象。并和录入的修改学生学号进行比较.如果相同,则使用新学生对象替换当前学生对象:

6.5 在修改学生选项里调用修改学生的方法

7. 退出系统

使用外层循环添加标记,终止系统。

7.2 实现代码:

// 定义学生类
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;
    }
}


// 案例实现
public class StudentManager {
    /*
        1:用输出语句完成主界面的编写
        2:用Scanner实现键盘录入数据
        3:用switch语句完成操作的选择
        4:用循环完成再次回到主界面
    */
    public static void main(String[] args) {
        //创建集合对象,用于保存学生数据信息
        ArrayList<Student> array = new ArrayList<Student>();

        //用循环完成再次回到主界面
        wc: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实现键盘录入数据
            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:  // 根据标记终止系统
            }
        }
    }

    //定义一个方法,用于添加学生信息
    public static void addStudent(ArrayList<Student> array) {
        //键盘录入学生对象所需要的数据,显示提示信息,提示要输入何种信息
        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("你输入的学号已经被占用,请重新输入");
            } 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);

        //将学生对象添加到集合中
        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) {
        //判断集合中是否有数据,如果没有显示提示信息
        if (array.size() == 0) {
            System.out.println("无信息,请先添加信息再查询");
            //为了让程序不再往下执行,我们在这里写上return;
            return;
        }

        //显示表头信息
        //\t其实是一个tab键的位置
        System.out.println("学号\t\t\t姓名\t\t年龄\t\t居住地");

        //将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
        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();

        //在删除/修改学生操作前,对学号是否存在进行判断
        //如果不存在,显示提示信息
        //如果存在,执行删除/修改操作

        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();
            //创建对象
            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、总结

好了,我们自己的学生管理系统实现了,是不是比使用数组来实现的效果好多了,更加的优雅啊。大家要自己学会使用这么好用的ArrayList集合哦。


猜你喜欢:

ArrayList类概述和ArrayList类常用方法

ArrayList集合详解

LinkedList和ArrayList对比各有什么优势?

Java高级软件测试工程师培训

分享到:
在线咨询 我要报名
和我们在线交谈!