随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

简介:

队列是一种先进先出的数据结构。

 

如果将队列应用在多线程的“生产者与消费者”模型处理中,那么生产者就没有必要等待消费者消费后再生产,可以直接将数据保存在队列之中,而消费者依然必须要等待生产者生产了才能消费。

队列的实现可以使用LinkedList类:

队列的使用主要依靠Queue接口之中提供的方法来处理:

 

- 向队列之中追加数据:public boolean offer(E e); 可以直接使用add()方法
- 通过队列获取数据:public E poll(); 弹出后删除数据

 

 代码实现:

 

import java.util.LinkedList;
import java.util.Queue;

public class MAIN {
    public static void main(String[] args) {
        Queue<String> qq = new LinkedList<String>();
        qq.add("张三");
        qq.add("李四");
        qq.add("王五");
        qq.add("狗蛋");
        qq.offer("黑子");
        System.out.println(qq);
        qq.poll();
        System.out.println(qq);
    }
}

 

 

输出结果:

 

现在观察抛出个数大于队列个数:

 

import java.util.LinkedList;
import java.util.Queue;

public class MAIN {

    public static void main(String[] args) {
        Queue<String> qq = new LinkedList<String>();
        qq.add("张三");    // 入队
        qq.add("李四");    // 入队
        qq.add("王五");    // 入队
        qq.add("狗蛋");    // 入队
        qq.offer("黑子");    // 入队
        System.out.println(qq);
        qq.poll();    // 出队
        qq.poll();    // 出队
        qq.poll();    // 出队
        qq.poll();    // 出队
        qq.poll();    // 出队
        qq.poll();    // 出队
        System.out.println(qq);
    }

}

 

输出结果:

 

会显示空队列,不会出现异常。

除了LinkedList外,还有一个优先级队列概念,可以使用PriorityQueue实现优先级队列:

 

public class PriorityQueue<E> 
extends AbstractQueue<E>
implements java.io.Serializable

 

 优先级队列实现:

 

import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;

public class MAIN {

    public static void main(String[] args) {
        Queue<String> qq = new PriorityQueue<String>();
        qq.add("Z");    // 入队
        qq.add("X");    // 入队
        qq.add("G");    // 入队
        qq.add("S");    // 入队
        qq.add("T");    // 入队
        System.out.println(qq);
        System.out.println(qq.poll());    // 抛出
        System.out.println(qq);
        System.out.println(qq.poll());    // 抛出
        System.out.println(qq);
        System.out.println(qq.poll());    // 抛出
        System.out.println(qq);
        System.out.println(qq.poll());    // 抛出
        System.out.println(qq);
        System.out.println(qq.poll());    // 抛出
    }
}

 

 

输出结果:

 

[G, S, X, Z, T]
G
[S, T, X, Z]
S
[T, Z, X]
T
[X, Z]
X
[Z]
Z

 

发现PriorityQueue队列存在排序操作。

 

 

 
posted on 2022-03-17 16:10  时间完全不够用啊  阅读(188)  评论(0编辑  收藏  举报