Java 中队列的使用
刚才看见群里的一个朋友在问队列的使用,确实在现实的写代码中非常少使用队列的,反正我是从来没使用过。仅仅是学数据结构的时候学过。
以下是我写的一个小样例,希望有不足之处请提出改正。O(∩_∩)O~
看代码:
以下是API中对队列的说明:
-
public interface Queue<E>
- extends Collection<E>
在处理元素前用于保存元素的 collection。除了主要的 Collection
操作外,队列还提供其它的插入、提取和检查操作。每一个方法都存在两种形式:一种抛出异常(操作失败时),还有一种返回一个特殊值(null 或 false,详细取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。
抛出异常 | 返回特殊值 | |
插入 | add(e) |
offer(e) |
移除 | remove() |
poll() |
检查 | element() |
peek() |
队列通常(但并不是一定)以 FIFO(先进先出)的方式排序各个元素。只是优先级队列和 LIFO 队列(或堆栈)例外,前者依据提供的比較器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。不管使用哪种排序方式,队列的头 都是调用 remove()
或 poll()
所移除的元素。在 FIFO 队列中,全部的新元素都插入队列的末尾。其它种类的队列可能使用不同的元素放置规则。每一个 Queue 实现必须指定其顺序属性。
假设可能,offer
方法可插入一个元素,否则返回 false。这与 Collection.add
方法不同,该方法仅仅能通过抛出未经检查的异常使加入元素失败。offer 方法设计用于正常的失败情况,而不是出现异常的情况,比如在容量固定(有界)的队列中。
remove()
和 poll()
方法可移除和返回队列的头。究竟从队列中移除哪个元素是队列排序策略的功能,而该策略在各种实现中是不同的。remove() 和 poll() 方法仅在队列为空时其行为有所不同:remove() 方法抛出一个异常,而 poll() 方法则返回 null。
element()
和 peek()
返回,但不移除,队列的头。
Queue 接口并没有定义堵塞队列的方法,而这在并发编程中是非经常见的。BlockingQueue
接口定义了那些等待元素出现或等待队列中有可用空间的方法,这些方法扩展了此接口。
Queue 实现通常不同意插入 null 元素,虽然某些实现(如 LinkedList
)并不禁止插入 null。即使在同意 null 的实现中,也不应该将 null 插入到 Queue 中,由于 null 也用作 poll 方法的一个特殊返回值,表明队列不包括元素。
Queue 实现通常没有定义 equals 和 hashCode 方法的基于元素的版本号,而是从 Object 类继承了基于身份的版本号,由于对于具有同样元素但有不同排序属性的队列而言,基于元素的相等性并不是总是定义良好的。
相关文章
- Java多线程并发编程
- Word处理控件Aspose.Words功能演示:在 Java 中将 Word DOCX 转换为 Markdown
- 【JAVA】在java类中连接和读取mysql数据库的实例(控制台显示)
- Java if判断对象为null时,null放在比较运算符的左边还是右边?哪种才是java标准?进来看看你就知道了
- java.lang.OutOfMemoryError异常解决方法
- Java核心技术卷I基础知识2.2 使用命令行工具
- Predicate和Consumer接口– Java 8中java.util.function包下的接口
- wavefrontHQ / java-lib
- java字节码生成框架及使用示例
- JavaDemo——java嵌入Sqlite数据库
- java mysql常见问题
- 【Java】java数据库连接池配置的几种方法
- Scala,Java,Python 3种语言编写Spark WordCount示例
- 第二十二节:Java语言基础-详细讲解位运算符与流程控制语句
- 基于Java实现在线翻译【100010578】
- (Java实习生)每日10道面试题打卡——Java基础知识篇2
- java多线程三种实现方式
- 浅析Java如何使用docker-java库操作DockerAPI
- Java队列使用举例
- 『Java练习生的自我修养』java-se进阶² • 并发与多线程
- 2023年java基础面试题之MQ,生成消费者队列不得不说的那些事
- Java线程安全队列Queue实现原理
- java 数据结构——堆栈和队列
- 我的Java开发学习之旅------>Java经典排序算法之归并排序
- Eclipse迅速执行:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- Java 队列以及循环队列