8、Queue、Deque接口
队列(Queue)是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在
表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作
的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
LinkedList是Queue接口的实现类
*boolean add(E e) :*将指定的元素插入此队列(如果立即可行且不会违反容量限制),在
成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。
*E element() :*获取,但是不移除此队列的头。
boolean offer(E e) :将指定的元素插入此队列(如果立即可行且不会违反容量限制),
当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而
只是抛出一个异常。
E peek() :获取但不移除此队列的头;如果此队列为空,则返回 null。
*E poll() :*获取并移除此队列的头,如果此队列为空,则返回 null。
E remove() :获取并移除此队列的头。
import java.util.LinkedList;
import java.util.Queue;
/*
* Queue接口:队列,是一种先进先出的线性数据结构(排队)
* LinkedList实现了queue接口
* 请求队列,消息队列,任务
*/
public class QueueDequeDemo {
public static void main(String[] args) {
Queue<String> queue=new LinkedList<>();
queue.add("小花");
queue.add("小黑");
queue.add("小红");
queue.add("小白");
queue.add("李华");
//peek() 检索但不删除此队列的头,如果此队列为空,则返回 null 。
//poll() 检索并删除此队列的头,如果此队列为空,则返回 null 。
System.out.println(queue.size());
System.out.println(queue.poll());
System.out.println(queue.size());
System.out.println(queue.poll());
System.out.println(queue.size());
System.out.println(queue.peek());
System.out.println(queue.size());
}
}
//输出
5
小花
4
小黑
3
小红
3
Deque:一个线性 collection,支持在两端插入和移除元素。
此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。
接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。
private static void deque() {
Deque<String> queue=new LinkedList<>();
queue.add("小花");
queue.add("小黑");
queue.add("小红");
queue.add("小白");
queue.add("李华");
System.out.println(queue.getFirst());
System.out.println(queue.getLast());
}
Stack类代表最先进先出(LIFO)堆栈的对象。 它扩展了类别Vector与五个操作,允许一个向量被视为堆栈。 设置在通常的push和pop操作,以及作为一种方法来peek在堆栈,以测试堆栈是否为empty的方法,以及向search在栈中的项目的方法在顶部项目和发现多远它是从顶部。
Deque接口及其实现提供了更完整和一致的LIFO堆栈操作集,这些接口应优先于此类。 例如:
Deque stack = new ArrayDeque();
private static void stack() {
Stack<String> s=new Stack<>();
s.add("小花");
s.add("小黑");
s.add("小红");
s.add("小白");
s.add("李华");
/*
peek()
查看此堆栈顶部的对象,而不从堆栈中删除它。
pop()
删除此堆栈顶部的对象,并将该对象作为此函数的值返回。
push(E item)
将项目推送到此堆栈的顶部。
search(Object o)
返回一个对象在此堆栈上的基于1的位置。
*/
System.out.println(s.peek());
}