Java 中 List 的几种实现
List 是有序、可重复的集合接口 常见实现:ArrayList、LinkedList、Vector、Stack、CopyOnWriteArrayList
ArrayList
底层结构
- 动态数组
- 初始容量:10
- 扩容机制
新容量 = 旧容量 + 旧容量 / 2(1.5 倍)
时间复杂度
| 操作 | 复杂度 | 说明 |
|---|---|---|
| 随机访问 get(i) | O(1) | 数组下标 |
| 尾部 add | O(1) 均摊 | 扩容时 O(n) |
| 中间插入/删除 | O(n) | 元素整体移动 |
线程安全
- 非线程安全
解决方案:Collections.synchronizedList;CopyOnWriteArrayList
LinkedList
底层结构
- 双向链表
- 每个节点:prev | item | next
时间复杂度
| 操作 | 复杂度 | 说明 |
|---|---|---|
| get(i) | O(n) | 要遍历 |
| 头/尾插入删除 | O(1) | 指针操作 |
| 中间插入 | O(n) | 找位置 |
Vector
底层结构
- 动态数组(和 ArrayList 类似)
关键区别
- 线程安全
- 方法都加了 synchronized
问题
- 性能差(锁太重)
- 已被淘汰
Stack
继承关系
Stack extends Vector
特点
- 后进先出(LIFO)
- 线程安全(继承 Vector)
CopyOnWriteArrayList(并发重点)
底层思想
- 写时复制


