学习日记(集合、常用类之 ArrayList)

学习日记(集合、常用类之 ArrayList)

一、概述

集合和数组一样,是一种容器,是用来装数据的,集合和数组比较如下。

集合数组
大小(长度)不固定,动态变化固定
元素类型可以不固定确定
功能丰富(增删改查等)单一(取元素,赋值等)
使用场景数据个数不确定,且需要做增删元素的场景,如购物车等类型和长度确定的场景,如存四个季节、周一到周日等

二、ArrayList 集合

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

1. 添加元素

方法名说明
public boolean add(E e)将指定的元素 e 添加到此集合的末尾
public void add(int index, E element)将指定的元素 e 添加到此集合的 index 位置

注意:添加元素的两种方法相当于方法的重载;第一种方法有返回值类型,且为 boolean 型,一般都为 true。

2. 泛型

ArrayList 是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型,是一种规范标准,如:

泛型类可操作的数据类型
ArrayList此集合只能操作字符串类型的元素
ArrayList此集合只能操作整数类型的元素

注意:集合中只能存储引用类型,不支持基本数据类型!;Integer 是整数的引用类型。

注意:JDK 1.7 开始,泛型后面的类型声明可以不写。

3. 常用 API、遍历

常用方法名称说明
public int size()个数:返回集合中元素的个数
public boolean add(E e)增:将指定的元素 e 添加到此集合的末尾
public void add(int index, E element)增:将指定的元素 e 添加到此集合的 index 位置
public E remove(int index)删:删除指定索引处的元素,返回被删除的元素
public boolean remove(Object o)删:删除指定的元素,返回删除是否成功
public E get(int index)查:返回指定索引处的元素
public E set(int index, E element)改:修改指定索引处的元素,返回被修改的元素

注意有的方法有返回值,但重点还是关注功能;用 for 循环进行元素的遍历。


三、案例

1. 案例 1:遍历并删除元素值

需求:

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

总结:从集合中遍历元素并删除特定元素的方法:

  • 从集合前面遍历元素并删除,每删除一个元素用 i–;

  • 从集合后面遍历元素并删除,可以避免漏掉元素。

2. 案例 2:存储自定义类型的对象

需求:

  • 学校存储 3 名学生的信息,依次展示出来。

自定义学生类

创建对象,输出信息

结果

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

3. 案例 3:元素搜索

需求:

学号姓名年龄班级得分等级
20220901小红21通信 1 班A
20220902小强22计算机 2 班A
20220903大壮23电子信息 3 班B
20220904小张24物联网 4 班B
  • 后台存储以上学生信息并展示;
  • 提供按学号搜索学生信息的功能。

自定义学生类

实现功能

运行结果

总结:标志位的巧妙使用

4. 案例代码

package com.residue;

import java.util.ArrayList;

public class Set05 {

    public static void main(String[] args) {
        /*
        案例一 需求:
            1. 某个班级的考试在系统上进行,成绩分别为:98,77,66,89,79,50,100;
            2. 现在需要先把成绩低于 80 分以下的数据去掉。
        */

        ArrayList<Integer> grades = new ArrayList<>();

        int[] numbers = {98, 77, 66, 89, 79, 50, 100};

        //用数组给集合元素赋值
        for (int i = 0; i < numbers.length; i++) {
            grades.add(numbers[i]);
        }

        System.out.println(grades);      //[98,77,66,89,79,50,100]


        //把成绩低于 80 分以下的数据去掉
        //方法一:正向遍历,需要 i--
        for (int i = 0; i < grades.size(); i++) {
            if (grades.get(i) < 80) {
                grades.remove(i);
                i--;
            }
        }

        //方法二:逆向遍历
//        for (int i = grades.size() - 1; i >= 0; i--) {
//            if (grades.get(i) < 80) {
//                grades.remove(i);
//            }
//        }

        System.out.println(grades);      //[98,89,100]
    }
}
package com.residue.set06;

import java.util.ArrayList;

public class Set06 {

    /*
    案例二 需求:学校存储 3 名学生的信息,依次展示出来。
     */

    public static void main(String[] args) {

        Student s1 = new Student("强", 22, 95.8, 'A');
        Student s2 = new Student("红", 23, 91.5, 'B');
        Student s3 = new Student("起", 21, 93.6, 'A');

        ArrayList<Student> students = new ArrayList<>();

        students.add(s1);
        students.add(s2);
        students.add(s3);

        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            System.out.println("姓名:" + s.getName());
            System.out.println("年龄:" + s.getAge());
            System.out.println("成绩:" + s.getScore());
            System.out.println("等级:" + s.getGrade());
            s.printGrade(s.getName());
            System.out.println("===================================");
        }
    }
}
package com.residue.set08;

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

public class Application {

    public static void main(String[] args) {

        /*
        案例三 需求:
            1. 后台存储学生信息并展示;
            2. 提供按学号搜索信息的功能。
         */

        //存储学生信息
        Student s1 = new Student(20220901, "小红", 21, "通信 1 班", 'A');
        Student s2 = new Student(20220902, "小强", 22, "计算机 2 班", 'A');
        Student s3 = new Student(20220903, "大壮", 23, "电子信息 3 班", 'B');
        Student s4 = new Student(20220904, "小张", 24, "物联网 4 班", 'B');

        ArrayList<Student> students = new ArrayList<>();

        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);
        
        //展示学生信息
        new Application().printMessage(students);

        //按学号搜索信息
        System.out.print("请输入所要查找学生信息的学号:");

        Scanner scanner = new Scanner(System.in);

        new Application().searchMessage(scanner, students);

        scanner.close();
    }

    //展示学生信息的功能方法
    public void printMessage(ArrayList<Student> students) {
        for (int i = 0; i < students.size(); i++) {
            System.out.println("学号:" + students.get(i).getId());
            System.out.println("姓名:" + students.get(i).getName());
            System.out.println("年龄:" + students.get(i).getAge());
            System.out.println("班级:" + students.get(i).getClassroom());
            System.out.println("等级:" + students.get(i).getGrade());
            System.out.println("============================================");
        }
    }

    //按学号搜索信息的功能方法
    public void searchMessage(Scanner scanner, ArrayList<Student> students) {

        int flag1 = 0;
        while (scanner.hasNextInt()) {
            flag1 = 1;
            int num = scanner.nextInt();
            int flag2 = 0;
            for (int i = 0; i < students.size(); i++) {
                if (students.get(i).getId() == num) {
                    flag2 = 1;
                    System.out.println("学号为 " + num + " 的同学为:" + students.get(i).getName());
                    System.out.println("他(她) " + students.get(i).getAge() + " 岁,在" + students.get(i).getClassroom());
                    System.out.println("等级为 " + students.get(i).getGrade());
                    flag1 = -1;
                    break;
                }
            }

            if (flag2 == 0) {
                System.out.print("没有该学生信息,请重新输入学号:");
            } else {
                break;
            }
        }

        if (flag1 != -1) {
            System.out.println("您的输入不符合学号的格式!");
            System.exit(0);
        }
    }
}

注意:

  1. 可以在 API 文档中查找所用到的功能。

  1. 不是所有类都支持泛型,只有类支持才可以用泛型,ArrayList 类支持。

  1. 如果一个集合中有两个及以上相同的元素,当删除该元素时,会删除靠前的元素。

  1. 如果输出转义字符 \t,最好用双引号,如 "\t",若用单引号,则与 int 类型相加时,会被当为 char 类型从而转化为 int 类型相加。
  2. 在任何地方存引用类型的变量,都是存的变量的地址
  3. 学会标志位的巧妙使用。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sun 3285

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值