前言
学习项目的过程中,我觉得自己有点太急功近利了一直跟着视频敲没有自己的思考(主要是最近在牛客读到了一位大佬👍👍👍,程序员牛肉的文章),🙌学技术不是一味的复制粘贴,特别是做项目,要边学边思考,一个功能的实现,我学会了什么技术,还有没有更好的可以替代它。

之前学的基础知识其实也没有学完,像集合,线程… 都还不知道是啥就开始学JavaWeb做项目了,在项目中使用队列存储我都一脸懵,在这里以问题的形式写一个学习笔记🤔,不仅仅是复习,也为以后的面试做准备,还有还有我的刷题网站是面试鸭呦🦆🦆🦆

🙌先介绍一下什么是ArrayList 集合

ArrayList 是 Java 集合框架(Java Collections Framework)中的一个核心类,位于 java.util 包中。它是一个可动态调整大小的数组实现,可以看作是数组的“加强版”。

核心特性:

  • 基于数组实现: ArrayList 内部使用一个 Object[] 数组来存储元素。这是它与 LinkedList 的根本区别。
  • 动态扩容: 这是 ArrayList 最大的优势。当你向 ArrayList 中添加元素时,如果内部数组的空间不足,它会自动创建一个更大的新数组,并将原数组中的所有元素复制过去。这个过程对程序员是透明的。
    *有 序 (Ordered): ArrayList 维护元素的插入顺序。元素在列表中的位置由其索引(index)决定,索引从 0 开始。
  • 允许重复和 null 值: ArrayList 可以存储重复的元素,也允许存储 null 值。
  • 非线程安全: ArrayList 不是线程安全的。如果多个线程同时访问一个 ArrayList 实例,并且至少有一个线程修改了列表的结构(添加、删除元素),那么必须在外部进行同步,否则可能导致数据不一致。如果需要线程安全的变体,可以使用 Collections.synchronizedList(new ArrayList<…>()) 或 CopyOnWriteArrayList。

常用方法:

  • 添加元素:
    • add(E e): 将元素添加到列表末尾。
    • add(int index, E element): 将元素插入到指定位置,该位置及之后的元素向后移动。
  • 获取元素:
    • get(int index): 返回指定索引位置的元素。
  • 修改元素:
    • set(int index, E element): 用指定元素替换列表中指定位置的元素。
  • 删除元素:
    • remove(int index): 删除指定索引位置的元素。
    • remove(Object o): 删除列表中第一次出现的指定元素。
  • 查询:
    • size(): 返回列表中的元素数量。
    • isEmpty(): 判断列表是否为空。
    • contains(Object o): 判断列表是否包含指定元素。
    • indexOf(Object o): 返回指定元素在列表中第一次出现的索引,如果不存在则返回 -1。
      转换:
    • toArray(): 将 ArrayList 转换为数组。

时间复杂度:

  • 随机访问 (按索引访问): 非常快 (O(1))。因为底层是数组,通过索引可以直接定位到元素。
  • 在末尾添加/删除元素: 通常很快 (摊还 O(1))。虽然偶尔需要扩容(O(n)),但平均下来是高效的。
  • 在中间或开头添加/删除元素: 较慢 (O(n))。因为需要移动插入点之后的所有元素。
  • 查找元素 (按值): 较慢 (O(n))。需要遍历整个列表进行比较。
import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        // 创建一个可以存储字符串的 ArrayList
        ArrayList<String> fruits = new ArrayList<>();

        // 添加元素
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
        fruits.add(1, "Grape"); // 在索引1处插入 "Grape"

        // 打印列表
        System.out.println(fruits); // 输出: [Apple, Grape, Banana, Orange]

        // 获取元素
        String firstFruit = fruits.get(0);
        System.out.println("第一个水果是: " + firstFruit); // 输出: Apple

        // 修改元素
        fruits.set(2, "Mango");
        System.out.println(fruits); // 输出: [Apple, Grape, Mango, Orange]

        // 删除元素
        fruits.remove("Orange"); // 删除值为 "Orange" 的元素
        System.out.println(fruits); // 输出: [Apple, Grape, Mango]

        // 获取大小
        System.out.println("水果种类数量: " + fruits.size()); // 输出: 3
    }
}

小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)

…。。。。。。。。。。。…

…。。。。。。。。。。。…

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐