📌 目录

  1. 什么是 ArrayList?
  2. ArrayList 的特性
  3. 创建和初始化 ArrayList
  4. ArrayList 常用方法
    • 4.1 添加元素
    • 4.2 访问元素
    • 4.3 修改元素
    • 4.4 删除元素
    • 4.5 检查元素
    • 4.6 清空集合
  5. ArrayList 性能
  6. ArrayList 和 LinkedList 的比较
  7. 总结
  8. 参考资料
  9. 出站链接

1. 什么是 ArrayList?

ArrayList 是 Java 集合框架中的一个实现类,属于 List 接口的实现。它是基于动态数组来实现的,可以存储重复元素,并且元素是有序的。ArrayList 提供了对元素的快速访问和修改。

与数组不同,ArrayList 可以动态扩展,当元素超出初始容量时,ArrayList 会自动增长其大小。


2. ArrayList 的特性

  • 可变大小ArrayList 会根据元素数量动态扩展其容量,初始容量为 10。
  • 允许重复元素:与数组不同,ArrayList 可以存储重复元素。
  • 有序ArrayList 保持元素的插入顺序,访问时按照插入顺序返回。
  • 随机访问:由于底层是数组实现,可以通过索引访问元素,时间复杂度为 O(1)。
  • 线程不安全ArrayList 不是线程安全的,如果在多线程环境中使用,需手动同步。

3. 创建和初始化 ArrayList

创建空的 ArrayList

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        System.out.println("ArrayList created: " + list);
    }
}

创建并初始化 ArrayList

import java.util.ArrayList;
import java.util.Arrays;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(Arrays.asList("Java", "Python", "C++"));
        System.out.println("ArrayList initialized: " + list);
    }
}


4. ArrayList 常用方法

4.1 添加元素

  • add(E e):将指定元素添加到 ArrayList 的末尾。
  • add(int index, E element):将指定元素插入到指定位置。
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add(1, "C++");  // 在索引 1 位置插入元素

4.2 访问元素

  • get(int index):返回指定位置的元素。
  • set(int index, E element):将指定位置的元素替换为新的元素。
String language = list.get(1);  // 获取索引为 1 的元素
list.set(1, "JavaScript");  // 将索引为 1 的元素替换为 "JavaScript"

4.3 修改元素

  • set(int index, E element):替换指定位置的元素。
list.set(0, "Go");  // 将索引为 0 的元素修改为 "Go"

4.4 删除元素

  • remove(int index):删除指定位置的元素。
  • remove(Object o):删除指定的元素。
list.remove(1);  // 删除索引为 1 的元素
list.remove("JavaScript");  // 删除元素 "JavaScript"

4.5 检查元素

  • contains(Object o):判断集合中是否包含指定元素。
  • size():返回集合中元素的个数。
  • isEmpty():判断集合是否为空。
boolean contains = list.contains("Go");  // 判断是否包含 "Go"
int size = list.size();  // 获取集合的大小
boolean isEmpty = list.isEmpty();  // 判断集合是否为空

4.6 清空集合

  • clear():删除集合中的所有元素。
list.clear();  // 清空集合


5. ArrayList 性能

  • 访问元素:通过索引访问元素的时间复杂度为 O(1)。
  • 添加元素:添加元素到末尾的时间复杂度为 O(1),但如果容量不足,需要扩展数组,扩展时的时间复杂度为 O(n)。
  • 删除元素:删除某个位置的元素的时间复杂度为 O(n),因为删除后所有后续元素需要移动。
  • 插入元素:在指定位置插入元素的时间复杂度为 O(n),因为插入后,元素需要移动。

6. ArrayList 和 LinkedList 的比较

特性ArrayListLinkedList
底层实现动态数组双向链表
访问时间O(1)O(n)
插入/删除性能O(n)(特别是中间插入/删除)O(1)(在列表头/尾插入/删除)
内存使用较少(单一数组)较多(每个元素需要额外的指针)
  • ArrayList 在随机访问时表现更好,适用于对元素进行频繁读取的情况。
  • LinkedList 在插入和删除元素时性能更好,适用于对元素进行频繁插入/删除的情况。

7. 总结

ArrayList 是一个常用的 Java 集合类,适用于对元素的频繁访问和修改。它提供了动态的数组功能,并且支持灵活的元素添加、删除和查找操作。ArrayList 的缺点是删除和插入操作的性能较差,尤其是在中间位置进行操作时。


8. 参考资料


9. 出站链接