队列的基本概念
队列,和栈一样,也是一种对数据的"读"和"写"的线性存储结构。
和前面所讲的 栈 不同的是:栈是遵循先进后出(FILO)的原理本节所讲的队列遵循的是先进先出(FIFO)的原理,队列的概念如图一所示:
由图我们可以看到,队列呈现的是两端开放的结构,ABCD按照顺序依次排队入列等待处理,由于A先进了,因此第一个处理的便是A数据,A数据处理完后就出队,此时BCD也依次入队,等待逐个逐个的处理。
通常的我们把入数据的一端为"队尾",出数据的一端为"队头",数据进队列的过程称为 "入队",出队列的过程称为 "出队"。
队列的应用
在生活中,队列也是很普遍的存在现象,例如排队结账,先结账的先离开、餐厅拿号恰饭,先来的先拿号。
在Java中,LinkedList类实现了Queue接口,因此我们可以继承并直接调用来实现简单的顺序队列,在实现之前,先讲下LinkedList中所提供的方法:
- add()此方法用于在队列尾部添加元素。
- peek()此方法用于查看队列头而不删除它。如果队列为空,则返回Null。
- element()此方法类似于peek()。当队列为空时,它将产生NoSuchElementException的异常。
-remove()此方法删除并返回队列的头部。当队列为空时,它将产生NoSuchElementException的异常。
-poll()此方法删除并返回队列的头部。如果队列为空,则返回null。
了解了上述的方法作用后,我们就能开始写一个简单的顺序队列了
package KtmDemo;
import java.util.Queue;
import java.util.LinkedList;
public class MyQueue {
public static void main(String[]args)
{
Queue<String> QueueDemo = new LinkedList<>();
QueueDemo.add("无论遇到什么困难");
QueueDemo.add("微笑着面对它");
QueueDemo.add("消除恐惧的最好办法");
QueueDemo.add("就是面对恐惧");
QueueDemo.add("加油,奥利给!");
System.out.println("正在排队队列:"+QueueDemo);
String rm = QueueDemo.remove();
System.out.println("已出队的数据为\n"+"“"+rm+"”"+"\n剩余的排队队列为"+QueueDemo);
rm = QueueDemo.poll();
System.out.println("已出队的数据为\n"+"“"+rm+"“"+"\n剩余的排队队列为"+QueueDemo);
}
}
输出结果
我们可以看到往队列里先放的 无论遇到什么困难 在第一次打印中已被取出,而在第二次打印时,排在队列第二位的微笑着面对它 也被取出,剩下的便是还在队列中的数据了。这样,一个简单的队列就实现了。