玩转Java:Queue(队列)的基本概念与应用探讨
最编程
2024-07-25 21:40:39
...
简介:
队列是一种先进先出的数据结构。
如果将队列应用在多线程的“生产者与消费者”模型处理中,那么生产者就没有必要等待消费者消费后再生产,可以直接将数据保存在队列之中,而消费者依然必须要等待生产者生产了才能消费。
队列的实现可以使用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队列存在排序操作。
上一篇: stack
推荐阅读
-
玩转Java并发:详解显示锁ReentrantLock与读写锁ReadWriteLock的实践应用
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
在Java中,deque和queue的区别与应用
-
玩转Python:理解多线程中的锁机制、全局锁、Queue队列及线程池应用实例
-
深入理解STL中的queue(队列)机制:探索队列在STL中的工作原理与应用
-
玩转Java:Queue(队列)的基本概念与应用探讨
-
C++编程:实战教程 - 实现栈与队列(Deque) 容器适配器,探讨Stack和Queue的实现及Queueue(Deque)的问题。深入理解:如何模拟实现Priority Queue (优先级队列) - 实例与练习。续集:仿函数在C++中的二次探索
-
C++教程:STL中的queue基础讲解 - 包含队列操作详解(push与pop)、其他成员函数介绍及实战运用示例2 - queue的具体实践应用
-
深入理解Java中的队列(Queue)与双端队列(Deque)
-
深入理解C++ STL: priority_queue(优先级队列)的工作原理及仿函数的应用与实战讲解