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代码_java命令提示符如何进入
- java calendar 设置小时_Java Calendar.set 方法设置时间的问题
- Java (三) 常量
- c++和java哪个好学_c++语言和Java语言,初学者该如何选择?「建议收藏」
- java后端开发需要学什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]
- java 中stopwatch_StopWatch使用介绍「建议收藏」
- java redis锁_Java中Redis锁的实现[通俗易懂]
- java中random方法取值范围_Java Random.nextInt()方法,随机产生某个范围内的整数
- java 优先级队列_JAVA 队列
- Java设计模式之迭代器模式
- Java中的ConcurrentModificationException异常原因分析及解决办法1/2/3/4
- 【Java】Best coding practices every java developer should
- java接入微信小程序步骤和代码示例
- java压缩与解压(Java.util.zip)详解编程语言
- 深入Java:利用API快速创建MySQL表(java创建mysql表)
- JSP中嵌入Java代码
- 系统命令Java实现Linux系统命令调用的探究(java调用linux)
- Java面试中的Redis题目剖析(java面试题redis)
- Java应用示例:使用Neo4j图数据库(neo4jjava实例)
- 使用Java连接MySQL数据库的具体操作方法(java连接mysql代码)
- Linux测试搭配Java快速实现稳定性验证(linux测试java)
- Java编程与Oracle技术创造技术价值的奥秘(java编程oracle)
- 数据库一步一步教你Java如何恢复Oracle数据库(java恢复oracle)
- Oracle Java开发实现功能丰富的应用程序(oracle jaca)
- java多线程读写文件示例