ArrayList集合常用API

Java集合框架ArrayList详解及案例
文章介绍了Java中的ArrayList集合,包括其作为动态数组的特点、如何添加、删除和修改元素,以及泛型的支持。通过示例代码展示了ArrayList的使用,如动态添加不同类型的数据,使用泛型限制数据类型,以及遍历和删除元素的方法。此外,还提供了两个案例,分别是删除ArrayList中特定条件的元素和存储及查找自定义对象(如电影信息和学生信息)。

一.集合概述

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

数组的特点:

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

集合的特点:

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

二.ArrayList集合入门

1.ArrayList集合

  • ArrayList集合是集合中的一种,它支持索引。
package com.api.arraylist;

import java.util.ArrayList;

/**
    目标:创建ArrayList对象,代表集合容器,往里面添加元素。
 */
public class ArrayListDemo1 {
    public static void main(String[] args) {
      // 1.创建ArrayList集合的对象代表集合容器
        ArrayList list = new ArrayList();

        // 2.添加数据 ArrayList集合添加元素一般是不会失败的 public boolean add(E e)
        // ArrayList集合默认存储任意类型的元素
        list.add("Java");
        list.add("MySQl");
        list.add("SSM");
        list.add("SSM");
        list.add(23);
        list.add(56.78);
        System.out.println(list.add('中')); // true

        //根据变量的地址去找这个内容,变量里面存的其实还是地址
        System.out.println(list); //[Java, MySQl, SSM, SSM, 23, 56.78, 中] 根据变量的地址去找这个内容

        // 3.给指定索引位置处插入元素 public void add(int index, E element)  方法重载
        list.add(2,"javaweb");
        System.out.println(list);// [Java, MySQl, javaweb, SSM, SSM, 23, 56.78, 中]
    }
}

2.ArrayList对于泛型的支持

  • ArrayList<E>:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据结构。
  • ArrayList<String>:此集合只能操作字符串类型的元素。
  • ArrayList<Integer>:此集合只能操作整数类型的元素。
  • 泛型只能支持引用数据类型,不能支持基本数据类型。
  • 使用泛型:<数据类型>
  • 创建集合对象都应该使用泛型
package com.api.arraylist;

import java.util.ArrayList;

/**
     目标:能够使用泛型约束ArrayList集合操作的数据类型
 */
public class ArrayListDemo2 {
    public static void main(String[] args) {
      // Object代表一切类型  泛型相当于是一个标记  Integer相当于int的引用类型  使用泛型来定义集合是一种规范和标准
        // 使用泛型来定义集合是一种规范和标准 不是所有的类都支持泛型
       // ArrayList<String> list = new ArrayList<String>();
        ArrayList<String> list = new ArrayList<>(); // 从JDK1.7开始,泛型后面的类型申明可以不写
        list.add("Java");
        list.add("MySQL");
//        list.add(23);
//        list.add(78.89);

        //Integer相当于int的引用类型
        ArrayList<Integer> list2 = new ArrayList<>();
        list2.add(23);
        list2.add(67);
      //  list2.add("Java");

        //Object代表一切类型
        ArrayList<Object> list3 = new ArrayList<>();
    }
}

3.ArrayList集合常用方法

package com.api.arraylist;

import java.util.ArrayList;

/**
    目标:掌握ArrayList集合的常用API
 */
public class ArrayListDemo3 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Java");
        list.add("Java");
        list.add("MySQL");
        list.add("MyBatis");
        list.add("HTML");
        // 1.public E get(int index):获取某个索引位置处的元素值
        String e = list.get(3);
        System.out.println(e); //MyBatis

        // 2.public int size():获取集合的大小(元素个数)
        System.out.println(list.size()); // 5

        // 3.完成集合的遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        // 4.public E remove(int index):删除某个索引位置处的元素值,并返回被删除的元素值
        System.out.println(list); // [Java, Java, MySQL, MyBatis, HTML]
        String e2 = list.remove(2);
        System.out.println(e2); // MySQL
        System.out.println(list); // [Java, Java, MyBatis, HTML]

        // 5.public boolean remove(Object o):直接删除元素值,删除成功返回true,删除失败返回false
        // 只会默认删除第一次出现的元素值,后面的不删除(针对元素出现重复的情况)
        System.out.println(list.remove("Java")); //默认删除前面的Java
        System.out.println(list); // [Java, MyBatis, HTML]

        // 6.public E set(int index,E element):修改某个索引位置处的元素值 左侧返回修改前的值
        String e3 = list.set(2,"MySQL");
        System.out.println(e3); // HTML
        System.out.println(list); // [Java, MyBatis, MySQL]
    }
}

4.ArrayList集合案例

案例一:遍历并删除元素

需求:

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

分析:

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

import java.util.ArrayList;

public class ArrayListDemo1 {
    public static void main(String[] args) {
        // 目标:学习集合遍历并删除元素的正确操作

        // 1.创建ArrayList集合对象代表集合容器,存储一批整型的学生成绩
        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, 77, 66, 89, 79, 50, 100]
     //   [98, 66, 89, 50, 100]
    //                      i
        // 2.遍历集合中的元素,并删除元素值低于80分的
        // 有毛病的代码
//        for(int i = 0;i < scores.size();i++){
//            int score = scores.get(i);
//            if(score < 80){
//                scores.remove(i);
//            }
//        }
//        System.out.println(scores); // [98, 66, 89, 50, 100]

        // 集合的正确遍历并删除
        // 方案一:每次删除一个元素,后退一个位置,防止跳位
        for(int i = 0;i < scores.size();i++){
            int score = scores.get(i);
            if(score < 80){
                scores.remove(i);
                i--; // 每次删除一个元素后,后退一个位置
            }
        }
        System.out.println(scores); // [98, 89, 100]
        // 方案二:倒着遍历再删除元素,从后往前遍历,这样可以防止跳位
        for(int i = scores.size() - 1;i >= 0;i--){
            int score = scores.get(i);
            if(score < 80){
                scores.remove(score);
            }
        }
        System.out.println(scores); // [98, 89, 100]

    }
}

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

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

分析:

  1. 定义一个电影类,定义一个集合存储电影对象
  2. 创建3个电影对象,封装相关数据,把这三个对象存入到集合中去
  3. 遍历集合中的3个对象,输出其相关信息

 


//定义电影类
public class Movie {
    // 1.成员变量私有化
    private String name; // 名字
    private double score; // 评分
    private String actor; // 演员
    // 2.提供一个无参构造器
    public Movie(){

    }
    // 有参构造器
    public Movie(String name,double score,String actor){
        this.name = name;
        this.score = score;
        this.actor = actor;
    }
    // 3.提供成员变量对应的Setter,Getter方法
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setScore(double score){
        this.score = score;
    }
    public double getScore(){
        return score;
    }
    public void setActor(String actor){
        this.actor = actor;
    }
    public String getActor(){
        return actor;
    }
}

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args) {
        // 目标:集合存储自定义类型的对象
        // 1.定义一个电影类,定义一个集合存储电影对象
        ArrayList<Movie> movies = new ArrayList<>();
        // 2.创建电影对象封装电影数据,把电影对象添加到集合中去
        movies.add(new Movie("《肖生客的救赎》",9.7,"罗宾斯"));
        movies.add(new Movie("《霸王别姬》",9.6,"张国荣"));
        movies.add(new Movie("《阿甘正传》",9.5,"汤姆汉克斯"));
        System.out.println(movies); // 集合存储的自定义类型,它存储的并不是对象本身,而是存储的是对象的地址
        // 3.遍历集合中的电影对象并展示出来
        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());
            System.out.println("----------------------------");
        }

    }
}

 ArrayList集合案例三:元素搜索

 需求:

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

分析:

  1. 定义Student类,定义ArrayList集合存储如上学生信息,并遍历展示出来。
  2. 提供一个方法,同时可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生信息,并展示。
  3. 使用死循环,让用户可以不停的搜索。
package com.api.arraylist;

public class Student {
    private String studyId; //学号
    private String name; // 姓名
    private int age; // 年龄
    private String className; // 班级

    public Student() {
    }

    public Student(String studyId, String name, int age, String className) {
        this.studyId = studyId;
        this.name = name;
        this.age = age;
        this.className = className;
    }

    public String getStudyId() {
        return studyId;
    }

    public void setStudyId(String studyId) {
        this.studyId = studyId;
    }

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

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }
}
package com.api.arraylist;

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

/**
    案例:学生信息系统:展示数据,并按照学号完成搜索
       学生类信息(学号, 姓名 , 年龄 , 班级)
      测试数据:
         "20180302", "叶孤城" ,23 , "护理一班"
         "20180303", "东方不败",23 , "推拿二班"
         "20180304", "西门吹雪" ,26 , "中医药四班"
         "20180305", "梅超风" , 26, "神经科2班"
 */
public class ArrayListTest6 {
    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\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("您要查询的学生信息如下:");
                System.out.println("学号\t\t\t\t姓名\t\t\t年龄\t\t班级");
                System.out.println(s.getStudyId() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getClassName());
            }
        }


    }
    /**
        根据学号,去集合中找出学生对象并返回
     */
    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; // 查无此学号
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GaoSSR

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

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

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

打赏作者

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

抵扣说明:

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

余额充值