Stack-ArrayDeque-LinkedList-区别
# Stack,ArrayDeque,LinkedList的区别
# 类继承树

- 由继承树看出,三者都是Collection的间接实现类
- ArrayDeque实现Deque接口,Stack继承于Vector,LinkedList实现Deque与List接口
- Stack,ArrayDeque,LinkedList都可以作为栈使用
# 底层数据存储方式
| 类型 | 存储方式 |
|---|---|
| Stack | 长度为10的数组 |
| ArrayDeque | 长度为16的数组 |
| LinkedList | 链表 |
# 方法参照表
| Stack | ArrayDeque | LinkedList |
|---|---|---|
| push(e) | addFirst(e)/offerFirst(e) | addFirst(e)/offerFirst(e) |
| pop() | removeFirst()/pollFirst() | removeFirst()/pollFirst() |
| peek() | getFirst()/peekFirst() | getFirst()/peekFirst() |
# 线程安全
| 线程安全 | |
|---|---|
| Stack | 线程同步 |
| ArrayDeque | 线程不同步 |
| LinkedList | 线程不同步 |
# 性能选项
- 通常情况下,不推荐使用Vector以及其子类Stack
- 因为
Vector
- grows by 50% of its size
- All methods are synchronized (only a single thread can access it)
ArrayList
- grows by 50% of its size
# 1. 需要线程同步
- 使用Collections工具类中synchronizedXxx(), 将线程不同步的ArrayDeque以及LinkedList转换成线程同步
# 2. 频繁的插入、删除操作:LinkedList
# 3. 频繁的随机访问操作:ArrayDeque
# 4. 未知的初始数据量:LinkedList
上次更新: 2021/11/21, 19:49:20