注意: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, 重要的实现类为ArrayDeque和LinkedList类
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.