类继承树
由继承树看出,三者都是Collection的间接实现类。
ArrayDeque实现Deque接口,Stack继承于Vector,LinkedList实现Deque与List接口。
区别
底层数据存储方式
存储方式 | |
stack | 长度为10的数组 |
ArrayDeque | 长度为16的数组 |
LinkedList | l链表 |
方法参照表
Stack | ArrayDeque | LinkedList |
push(e) | addFirst(e)/offerFirst(e) | addFirst(e)/offerFirst(e) |
pop() | remove()/removeFirst()/pollFirst() | removeFirst()/pollFirst() |
peek() | getFirst()/peekFirst() | getFirst()/peekFirst() |
双端队列的常用方法
- addFirst(E):void 在队头添加元素。
- addLast(E):void 在队尾添加元素。
- add(E):void 在队尾添加元素。
- offerFirst(E):boolean 在队头添加元素,并返回是否添加成功。
- offerLast(E):boolean 在队尾添加元素,并返回是否添加成功。
- offer(E):boolean 在队尾添加元素,并返回是否添加成功。
- removeFirst():E 删除队头元素,并返回删除的元素,如果队列为null,抛出异常。
- remove():E 删除队头元素,并返回删除的元素,如果队列为null,抛出异常。
- removeLast():E 删除队尾元素,并返回删除的元素,如果队列为null,抛出异常。
- pollFirst():E 删除队头元素,并返回删除的元素,如果队列为null,返回null。
- pollLast():E 删除队尾元素,并返回删除的元素,如果队列为null,返回null。
- getFirst():E 获取队头元素,如果队列为null,抛出异常。
- getLast():E 获取队尾元素,如果队列为空,抛出异常。
- peekFirst():E 获取队头元素,如果队列为null,返回null。
- peeLast():E 获取队尾元素,如果队列为null,返回null。
双端队列简图:
线程安全
线程安全 | |
stack | 线程同步 |
ArrayDeque | 线程不同步 |
LinkedList | 线程不同步 |
性能选项
通常情况下,不推荐使用Vector以及其子类Stack
- 需要线程同步
- 使用Collections工具类中synchronizedXxx()将线程不同步的ArrayDeque以及LinkedList转换成线程同步。
- 频繁的插入、删除操作:LinkedList
- 频繁的随机访问操作:ArrayDeque
- 未知的初始数据量:LinkedList
转载出处: