【Java】ArrayList

文章目录

前言

1.之前学过,因此本文是个人复习笔记,为视频的总结以及个人思考,可能不是很详细。

2.教程是b站黑马程序员的JAVASE基础课程,笔记中的大部分图片来自于视频中的PPT截图。

3.Java环境为Java SE 17.0.3.1,IntelliJ IDEA版本为2025.2

https://www.bilibili.com/video/BV1Cv411372m

内容概览

1.本文内容包括ArrayList的创建、常用API与元素删除。

2.笔记对应视频80-83节

更新记录

ArrayList的创建

ArrayList是一种集合,集合就是一种容器,用于存储数据。功能类似于数组。集合大小可变,而数组大小固定。可以直接打印,打印结果见下文。

1.未指定类型创建(不推荐)

在创建ArrayList集合的对象的时候,通过不指定这个具体的数据类型,那么这个ArrayList中可以存储多种数据类型。

Java 复制代码
package com.zbhgis.arraylist;

import java.util.ArrayList;

public class ArrayListDemo1 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("test");
        list.add("123");
        list.add(123);
        list.add('\t');
        list.add((char) 48);
        list.add(new int[] {7, 8, 9});
        System.out.println(list);
    }
}

打印结果

Plain 复制代码
[test, 123, 123,         , 0, [I@776ec8df]

2.指定数据类型创建

在创建ArrayList集合的对象的时候,通过在<>中指定具体的数据类型,那么这个ArrayList中可以存储指定数据类型。

Java 复制代码
package com.zbhgis.arraylist;

import java.util.ArrayList;

public class ArrayListDemo2 {
    public static void main(String[] args) {
        // ArrayList<String> list = new ArrayList<String>();
        ArrayList<String> list = new ArrayList<>();
        list.add("test");
        list.add("123");
        list.add("好的");
        list.add("Java");
        System.out.println(list);
    }
}

打印结果

Plain 复制代码
[test, 123, 好的, Java]

ArrayList的常用API

一些ArrayList的增删查改API

https://docs.oracle.com/en/java/javase/17/docs/api/index.html

注意点

1.在指定位置添加数据时,即使用add(int index, E element)时,不返回结果。

2.在指定位置查询数据时,即使用get(int index)是,返回结果是查询到的数据,对原始ArrayList没影响

3.在指定位置删除数据时,即使用remove(int index)时,返回结果是被删除的原始元素

4.在指定位置修改数据时,即使用set(int index, E element)是,返回结果是被修改的原始元素

5.使用remove(Object o)时,如果ArrayList中有多个object内容相同,那么就remove掉第一个元素。

Java 复制代码
package com.zbhgis.arraylist;

import java.util.ArrayList;

public class ArrayListDemo3 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("123");
        list.add("test");
        list.add("123");
        list.add("好的");
        list.add("Java");
        list.add("123");
        System.out.println(list);

        list.add(1, "666");
        System.out.println(list);

        System.out.println(list.get(1));

        System.out.println(list.size());

        System.out.println(list.remove(3));
        System.out.println(list);

        list.remove("123");
        System.out.println(list);

        System.out.println(list.set(1, "000"));
        System.out.println(list);

    }
}

打印结果

Plain 复制代码
[123, test, 123, 好的, Java, 123]
[123, 666, test, 123, 好的, Java, 123]
666
7
123
[123, 666, test, 好的, Java, 123]
[666, test, 好的, Java, 123]
test
[666, 000, 好的, Java, 123]

ArrayList的元素删除

创建一个ArrayList,然后添加若干元素之后,删除包含指定名称的元素。

由于ArrayList本身元素被删除之后,其内容会减少,容量变小了,对应索引也改变,因此使用常规方法直接从前往后遍历删除元素不可行。

方法一:删除元素后调整遍历的下标,往前移动。

方法二:从后往前遍历元素并删除。

方法三:创建一个相同内容的ArrayList,然后依次遍历ArrayList1,对ArrayList2进行删除操作。

Java 复制代码
package com.zbhgis.arraylist;

import java.util.ArrayList;

public class ArrayListDemo4 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("3060显卡");
        list.add("AMD");
        list.add("5060显卡");
        list.add("显卡");
        list.add("Java教程");
        list.add("AirPods");
        list.add("4090显卡");
        ArrayList<String> list2 = new ArrayList<>(list);
        ArrayList<String> list3 = new ArrayList<>(list);
        ArrayList<String> list4 = new ArrayList<>(list);
        ArrayList<String> list5 = new ArrayList<>(list);


        // 方法一:对list遍历,remove后i左移一个
        System.out.println("list1");
        System.out.println(list);
        for (int i = 0; i < list.size(); i++) {
            String obj = list.get(i);
            if (obj.contains("显卡")) {
                list.remove(obj);
                i--;
            }
        }
        System.out.println(list);

        // 方法二:对list2遍历,从后往前remove
        System.out.println("list2");
        System.out.println(list2);
        for (int i = list2.size() - 1; i >= 0; i--) {
            String obj = list2.get(i);
            if (obj.contains("显卡"))
                list2.remove(obj);
        }
        System.out.println(list2);

        // 方法三:对list3遍历,但是对list4进行remove
        System.out.println("list3 & list4");
        System.out.println(list3);
        for (int i = 0; i < list3.size(); i++) {
            String obj = list3.get(i);
            if (obj.contains("显卡"))
                list4.remove(obj);
        }
        System.out.println(list4);

        // 错误:因为list本身元素被删除之后,其内容会改变,对应索引也改变
        System.out.println("list5");
        System.out.println(list5);
        for (int i = 0; i < list5.size(); i++) {
            String obj = list5.get(i);
            if (obj.contains("显卡"))
                list5.remove(obj);
        }
        System.out.println(list5);

    }
}

打印结果

Plain 复制代码
list1
[3060显卡, AMD, 5060显卡, 显卡, Java教程, AirPods, 4090显卡]
[AMD, Java教程, AirPods]
list2
[3060显卡, AMD, 5060显卡, 显卡, Java教程, AirPods, 4090显卡]
[AMD, Java教程, AirPods]
list3 & list4
[3060显卡, AMD, 5060显卡, 显卡, Java教程, AirPods, 4090显卡]
[AMD, Java教程, AirPods]
list5
[3060显卡, AMD, 5060显卡, 显卡, Java教程, AirPods, 4090显卡]
[AMD, 显卡, Java教程, AirPods]

总结

1.ArrayList是未指定数据类型的时候可以放入不同的数据类型元素。

2.ArrayList的长度是可变的,因此在进行遍历的时候需要留意。

相关推荐
阿杰同学1 小时前
Java 设计模式 面试题及答案整理,最新面试题
java·开发语言·设计模式
这样の我1 小时前
java 模拟chrome指纹 处理tls extension顺序
java·开发语言·chrome
yong99901 小时前
基于MATLAB的雷达压制干扰仿真
开发语言·matlab
LeonIter1 小时前
《以日为鉴》读书随笔
笔记
Genevieve_xiao1 小时前
【数据结构与算法】【xjtuse】面向考纲学习(下)
java·数据结构·学习·算法
4311媒体网1 小时前
php和c++哪个更好学?C++难学吗?
java·c++·php
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 基于SpringBoot的流行音乐网站的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
catchadmin1 小时前
现代高效 PHP 开发的最佳实践
开发语言·后端·php
jiayong231 小时前
Spring 框架完全指南
java·后端·spring