一 、队列
在Java中,Queue是个接口,底层是通过链表实现的。
 
 只允许在一端进行插入数据操作,
 在另一端进行删除数据操作的特殊线性表,
 队列具有先进先出FIFO(First In First Out) 。
入队列:
 进行插入操作的一端称为队尾(Tail/Rear)。
出队列:
 进行删除操作的一端称为队头(Head/Front)。

二 、队列的常用方法
Queue是个接口,
 在实例化时必须实例化LinkedList的对象,
 因为LinkedList实现了Queue接口。

public static void main(String[] args) {
    Queue<Integer> q = new LinkedList<>();
    q.offer(1);
    q.offer(2);
    q.offer(3);
    q.offer(4);
    q.offer(5);                  // 从队尾入队列
    System.out.println(q.size());
    System.out.println(q.peek());  // 获取队头元素
    
    q.poll();
    System.out.println(q.poll());  // 从队头出队列,并将删除的元素返回
    
    if(q.isEmpty()){
        System.out.println("队列空");
    }else{
        System.out.println(q.size());
    }
}
 
三 、 队列的模拟实现

四 、 循环队列
循环队列通常使用数组实现。
 
五 、 双端队列 (Deque)
Deque是一个接口,使用时必须创建LinkedList的对象。
 

双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,
 deque 是 “double ended queue” 的简称。
 元素可以从队头出队和入队,也可以从队尾出队和入队。


![buuctf-[BSidesCF 2020]Had a bad day](https://img-blog.csdnimg.cn/b34e44b156084c418c1359eb4b5123a7.png)















