队列 , 双端队列, 栈

注意:LinkedList中添加或者取出的方法有很多, 比如add, offer,offerFirst,offerLast, push. 根据使用的数据结构不同,最好区分使用.

一, 队列Queue  FIFO(first in first out)

0, 模型上一般为右进左出, 右端入队并称为队尾, 左端出队并称为队头

1. 队列Queue接口继承了Collection接口. 和List接口, Set接口同一个级别.

2. Queue的重要实现类LinkedList , 当然LinkedList也实现了List接口.

3. 双端队列Deque接口继承自Queue接口.

4.获取一个队列实例

Queue<String> queue = new LinkedList<String>();

5. 使用LinkedList中的offer方法入队 , 使用poll方法出队(取出并返回) , 使用peek获得队头(查看不取出)



二 , 双端队列Deque

0,模型上, 左端为First,右端为Last

1, 双端队列模型上是两端都可以进出.

2 , 双端队列Deque继承了队列Queue接口

3, 重要的实现类为ArrayDequeLinkedList

4, LinkedList大小可变的链表双端队列, 允许元素为null

5, ArrayDeque大小可变的数组双端队列, 不允许元素为null

6, 并发场景下用LinkedBlockingDeque实现类, 如果队列为空时, 获取操作将会阻塞, 直到有元素添加.

7.获取一个Deque实例:

Deque<String> deque = new ArrayDeque<String>();
Deque<String> deque = new LinkedList<String>();
8,从左端入队为 offerFirst(offer可以实现同样效果,不建议使用); 从右端入队为 offerLast

9.从左端出队为pollFirst(poll可以实现同样效果,不建议使用); 从右端出队为pollLast


三 , 栈Stack    LIFO(last in first out)

1 , 如果将双端队列的一端堵死, 就形成了栈数据结构 ,所以只要放弃Deque一端的入队和出队即可, 
2 , 并 推荐 offerFirst方法入栈 , pollFirst方法出栈

3 , 获取一个栈的实例:

Deque<String> stack = new LinkedList<String>();

4 , 入栈的方法为push, 出队的方法为pop.


猜你喜欢

转载自blog.csdn.net/zz153417230/article/details/80065065