Java初接触 | 常用API【ArrayList】

115 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12月更文挑战」的第20天

ArrayList

集合概述

集合是与数组类似,也是一种容器,用于装数据的

数组的特点

  • 数组定义完成并启动后,类型确定、长度固定。
  • 在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的。

集合的特点

  • 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
  • 集合非常适合做元素个数不确定,且要进行增删操作的业务场景。
  • 集合的提供了许多丰富、好用的功能,而数组的功能很单一。

ArrayList集合快速入门

ArrayList集合——ArrayList是集合中的一种,它支持索引

ArrayList集合的对象获取 image.png

ArrayList集合添加元素的方法 image.png

ArrayList对于泛型的支持

泛型概述

  • ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。

举例:

  • ArrayList :此集合只能操作字符串类型的元素。
  • ArrayList:此集合只能操作整数类型的元素。

注意:集合中只能存储引用类型,不支持基本数据类型。

ArrayList常用API、遍历

ArrayList集合常用方法 image.png

ArrayList集合案例:遍历并删除元素

需求:

  • 某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100
  • 现在需要先把成绩低于80分以下的数据去掉。

分析:
① 定义ArrayList集合存储多名学员的成绩。
② 遍历集合每个元素,如果元素值低于80分,去掉它。

/**
   案例:从集合中遍历元素且删除。
 */
    public static void main(String[] args) {
        // 1、创建集合对象:存入学生成绩(98,77,66,89,79,50,100)
        ArrayList<Integer> scores = new ArrayList<>();
        scores.add(98);
        scores.add(77);
        scores.add(66);
        scores.add(89);
        scores.add(79);
        scores.add(50);
        scores.add(100);
        System.out.println(scores);
        // [98, 77, 66, 89, 79, 50, 100]
        // [98, 66, 89, 50, 100]
        //                   i

        // 1、遍历集合中的每个元素
//        for (int i = 0; i < scores.size(); i++) {
//            int score = scores.get(i);
//            // 2、判断这个分数是否低于80分,如果低于则从集合中删除它
//            if(score < 80){
//                scores.remove(i);
//            }
//        }
//        System.out.println(scores);


        // [98, 77, 66, 89, 79, 50, 100]
        // [98,  89, 100]
        //   i

        for (int i = scores.size() - 1; i >= 0 ; i--) {
            int score = scores.get(i);
            // 2、判断这个分数是否低于80分,如果低于则从集合中删除它
            if(score < 80){
                scores.remove(i);
            }
        }
        System.out.println(scores);
    }

ArrayList集合案例:存储自定义类型

案例:影片信息在程序中的表示

需求

  • 某影院系统需要在后台存储上述三部电影,然后依次展示出来。

分析

① :三部电影是3个对象,定义一个电影类,定义一个集合存储电影对象。

② :创建3个电影对象,封装相关数据,把3个对象存入到集合中去。

③ :遍历集合中的3个对象,输出相关信息。

image.png

结论:集合中存储的元素并不是对象本身,而是对象的地址。

/**
    案例:集合存储自定义元素并遍历。
    需求:定义电影类(名称,分值,演员),创建3个电影对象,代表三部影片,存入集合中并遍历。
    《肖生克的救赎》, 9.7 , 罗宾斯
    《霸王别姬》, 9.6 , 张国荣、张丰毅
    《阿甘正传》, 9.5 , 汤姆.汉克斯
 */
    public static void main(String[] args) {
        // 1、定义一个电影类:Movie
        // 2、定义一个ArrayList集合存储这些影片对象。
        ArrayList<Movie> movies = new ArrayList<>();

        // 3、创建影片对象封装电影数据,把对象加入到集合中去。
//        Movie m1 = new Movie("《肖生克的救赎》", 9.7 , "罗宾斯");
//        movies.add(m1);
        movies.add(new Movie("《肖生克的救赎》", 9.7 , "罗宾斯"));
        movies.add(new Movie("《霸王别姬》", 9.6 , "张国荣、张丰毅"));
        movies.add(new Movie("《阿甘正传》", 9.5 , "汤姆.汉克斯"));

        System.out.println(movies);

        // 4、遍历集合中的影片对象并展示出来
        for (int i = 0; i < movies.size(); i++) {
            Movie movie = movies.get(i);
            System.out.println("片名:" + movie.getName());
            System.out.println("评分:" + movie.getScore());
            System.out.println("主演:" + movie.getActor());
        }
    }

ArrayList集合案例:元素搜索

案例:学生信息系统的数据搜索

image.png

需求

  • 后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。

分析

① 定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来。

② 提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。

③ 使用死循环,让用户可以不停的搜索。

/**
    案例:学生信息系统:展示数据,并按照学号完成搜索
     学生类信息(学号,姓名,性别,班级)
     测试数据:
     "20180302","叶孤城",23,"护理一班"
     "20180303","东方不败",23,"推拿二班"
     "20180304","西门吹雪",26,"中药学四班"
     "20180305","梅超风",26,"神经科2班"
 */

    public static void main(String[] args) {
        // 1、定义一个学生类,后期用于创建对象封装学生数据
        // 2、定义一个集合对象用于装学生对象
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("20180302","叶孤城",23,"护理一班"));
        students.add(new Student("20180303","东方不败",23,"推拿二班"));
        students.add(new Student( "20180304","西门吹雪",26,"中药学四班"));
        students.add(new Student( "20180305","梅超风",26,"神经科2班"));
        System.out.println("学号\t\t名称\t年龄\t\t班级");

        // 3、遍历集合中的每个学生对象并展示其数据
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            System.out.println(s.getStudyId() +"\t\t" + s.getName()+"\t\t"
                    + s.getAge() +"\t\t" + s.getClassName());
        }

        // 4、让用户不断的输入学号,可以搜索出该学生对象信息并展示出来(独立成方法)
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请您输入要查询的学生的学号:");
            String id = sc.next();
            Student s = getStudentByStudyId(students, id);
            // 判断学号是否存在
            if(s == null){
                System.out.println("查无此人!");
            }else {
                // 找到了该学生对象了,信息如下
                System.out.println(s.getStudyId() +"\t\t" + s.getName()+"\t\t"
                        + s.getAge() +"\t\t" + s.getClassName());
            }
        }
    }

    /**
      根据学号,去集合中找出学生对象并返回。
     * @param students
     * @param studyId
     * @return
     */
    public static Student getStudentByStudyId(ArrayList<Student> students, String studyId){
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            if(s.getStudyId().equals(studyId)){
                return s;
            }
        }
        return null; // 查无此学号!
    }