队列(Queue)
是一种特殊的线性表,是一种先进先出(FIFO) 的数据结构。它只允许在表的前端(front) 进行删除操作,而在表的后端(rear) 进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。用于消息队列,请求队列等
LinkedList是Queue接口的实现类
boolean add(E e): 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成
功时返回true,如果当前没有可用的空间,则抛出llegalStateException.
E element() : 获取,但是不移除此队列的头。
boolean offer(E e): 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于add(E),后者可能无法插入元素,而只是抛出一个异常。
E peek(): 获取但不移除此队列的头;如果此队列为空,则返回null.
E poll(): 获取并移除此队列的头,如果此队列为空,则返回null.
E remove(): 获取并移除此队列的头。
双端队列Deque:
一个线性collection, 支持在两端插入和移除元素。
此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。
接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。
栈Stack
Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
代码综合示例:
package com.booy;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class QueueDequeDemo {
public static void main(String[] args) {
queue();
deque();
stack();
}
public static void queue(){
Queue<String> q = new LinkedList<>();
q.add("Tom");
q.add("Lily");
q.add("Bin");
q.add("Lindy");
q.add("Billy");
q.add("Billy");
System.out.println("---------------Queue------------");
//获取但不移除此队列的头;如果此队列为空,则返回null
System.out.println(q.peek());
System.out.println(q.size());
//获取并移除此队列的头,如果此队列为空,则返回null.
System.out.println(q.poll());
System.out.println(q.size());
}
public static void deque(){
Deque<String> d = new LinkedList<>();
d.add("Tom");
d.add("Lily");
d.add("Bin");
d.add("Lindy");
d.add("Billy");
d.add("Billy");
System.out.println("---------------Deque------------");
//检索并删除第一个元素
System.out.println(d.pollFirst());
//检索不删除第一个元素
System.out.println(d.getFirst());
System.out.println(d.getLast());
}
public static void stack(){
Stack<String> s =new Stack<>();
s.push("Tom");
s.push("Lily");
s.push("Bin");
System.out.println("---------------Stack------------");
//删除此堆栈顶部的对象,并将该对象作为此函数的值返回
System.out.println(s.pop());
//查看此堆栈顶部的对象,而不从堆栈中删除它
System.out.println(s.peek());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
/**
运行结果:
---------------Queue------------
Tom
6
Tom
5
---------------Deque------------
Tom
Lily
Billy
---------------Stack------------
Bin
Lily
Lily
Tom
*/