Java 的 ArrayList 是一种非常常用的动态数组实现,属于 Java 集合框架中 java.util 包的一部分。它可以自动扩容,用于存储任意类型的对象(泛型支持),并提供常用的增删改查功能。


📘 一、基本概念

  • ArrayList 实现了 List 接口
  • 底层使用 动态数组(Object[]) 实现。
  • 元素有序、可重复。
  • 支持随机访问(索引方式读写),效率高。
  • 线程不安全,多线程需使用 Collections.synchronizedList 或 CopyOnWriteArrayList

📚 二、常用构造方法

// 默认初始容量10
ArrayList<String> list1 = new ArrayList<>();

// 指定初始容量
ArrayList<Integer> list2 = new ArrayList<>(50);

// 用现有集合初始化
List<String> oldList = Arrays.asList("A", "B");
ArrayList<String> list3 = new ArrayList<>(oldList);

🛠 三、常用方法示例

ArrayList<String> list = new ArrayList<>();

// 添加元素
list.add("Apple");
list.add("Banana");

// 插入元素
list.add(1, "Orange");

// 获取元素
String fruit = list.get(0);  // Apple

// 修改元素
list.set(1, "Grapes");

// 删除元素
list.remove("Grapes");       // 删除指定对象
list.remove(0);              // 删除指定位置的元素

// 查询
boolean has = list.contains("Banana");

// 获取大小
int size = list.size();

// 清空
list.clear();

// 判断是否为空
boolean empty = list.isEmpty();

🔁 四、遍历方式

// for-each
for (String item : list) {
    System.out.println(item);
}

// 使用索引
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

// 使用迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

⚙️ 五、扩容机制(底层原理)

  • 初始容量默认是 10。
  • 当容量不够时,会扩容为原容量的 1.5 倍newCapacity = oldCapacity + (oldCapacity >> 1); // 1.5倍扩容
  • 扩容通过 Arrays.copyOf() 实现,属于成本较高的操作(O(n))。

🧱 六、与其他集合的对比

特性ArrayListLinkedListVector
底层结构动态数组双向链表动态数组
是否线程安全是(已过时)
随机访问效率
插入/删除效率低(O(n))高(O(1))

📌 七、常见使用场景

  • 需要频繁访问元素,且插入/删除较少;
  • 数据大小变化频繁但操作大多集中在读取;
  • 可用于缓存、队列(配合 remove(0))、搜索列表等。

🔗 八、参考资料与出站链接