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))。
🧱 六、与其他集合的对比
特性 | ArrayList | LinkedList | Vector |
---|---|---|---|
底层结构 | 动态数组 | 双向链表 | 动态数组 |
是否线程安全 | 否 | 否 | 是(已过时) |
随机访问效率 | 高 | 低 | 高 |
插入/删除效率 | 低(O(n)) | 高(O(1)) | 低 |
📌 七、常见使用场景
- 需要频繁访问元素,且插入/删除较少;
- 数据大小变化频繁但操作大多集中在读取;
- 可用于缓存、队列(配合
remove(0)
)、搜索列表等。
发表回复