LinkedList实现栈、队列或者双端队列分析

LinkedList实现了Deque和Queue接口,可以按照队列、栈和双端队列的方式进行操作

LinkedList实现栈、队列或者双端队列分析

一.Queue里面的方法,Queue扩展了Collection,它的主要操作有三个(每个操作2个方法,针对队列长度是否受限制对应是否抛异常---有些队列的是有长度限制的,本例的LinkedList实现queue没长度限制):

LinkedList实现栈、队列或者双端队列分析

在尾部添加元素 (add, offer):
add()会在长度不够时抛出异常:IllegalStateException;  offer()则不会,只返回false
查看头部元素 (element, peek),返回头部元素,但不改变队列
element()会在没元素时抛出异常:NoSuchElementException;  peek()返回null;
删除头部元素 (remove, poll),返回头部元素,并且从队列中删除
remove()会在没元素时抛出异常:NoSuchElementException;  poll()返回null; 


代码实现队列demo
1.利用队列的接口的实现

LinkedList实现栈、队列或者双端队列分析

2.用Deque双端队列接口(LinkedList也实现了这个接口)定义的方法来实现队列

LinkedList实现栈、队列或者双端队列分析
二.Java中有一个类Stack,用于表示栈,但这个类已经过时了。Java中没有单独的栈接口,栈相关方法包括在了表示双端队列的接口Deque中,主要有三个方法:

LinkedList实现栈、队列或者双端队列分析
push表示入栈,在头部添加元素,栈的空间可能是有限的,如果栈满了,push会抛出异常IllegalStateException。
pop表示出栈,返回头部元素,并且从栈中删除,如果栈为空,会抛出异常NoSuchElementException。
peek查看栈头部元素,不修改栈,如果栈为空,返回null。 

LinkedList实现栈、队列或者双端队列分析

三.栈和队列只是双端队列的特殊情况,它们的方法都可以使用双端队列的方法替代,使用不同的名称和方法,概念上更为清晰。看看Deque接口里面的方法:
LinkedList实现栈、队列或者双端队列分析