当前位置: 首页 > news >正文

Java 中队列的使用

刚才看见群里的一个朋友在问队列的使用,确实在现实的写代码中非常少使用队列的,反正我是从来没使用过。仅仅是学数据结构的时候学过。

以下是我写的一个小样例,希望有不足之处请提出改正。O(∩_∩)O~

看代码:

import java.util.LinkedList; import java.util.Queue; public class TestQueue { /** * @param args * @author JavaAlpha * Info 測试队列 */ public static void main(String[] args) { Queue<String> queue = new LinkedList<String>(); queue.offer("1");//插入一个元素 queue.offer("2"); queue.offer("3"); //打印元素个数 System.out.println("queue.size()"+queue.size()); //遍历打印全部的元素,安装插入是顺序打印 for (String string : queue) { System.out.println(string); } } } 打印内容: queue.size()3 1 2 3

 

以下是API中对队列的说明:

 

public interface Queue<E>
extends Collection<E>

在处理元素前用于保存元素的 collection。除了主要的 Collection 操作外,队列还提供其它的插入、提取和检查操作。每一个方法都存在两种形式:一种抛出异常(操作失败时),还有一种返回一个特殊值(nullfalse,详细取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 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 实现通常没有定义 equalshashCode 方法的基于元素的版本号,而是从 Object 类继承了基于身份的版本号,由于对于具有同样元素但有不同排序属性的队列而言,基于元素的相等性并不是总是定义良好的。

 

转载于:https://www.cnblogs.com/mfrbuaa/p/4023725.html

相关文章:

  • 金融壹账通将推动新一轮金融科技创新浪潮
  • 安卓布局修改基础常识篇之TextView属性
  • Javascript基础系列-表达式和运算符
  • 让nginx 的ssi支持include相对路径
  • 对超线程几个不同角度的解释
  • linux awk命令详解
  • 常用的math函数
  • Apache的基本使用
  • 『飞行路线 分层图最短路』
  • 操作系统
  • 《Java编程思想》读书笔记-对象导论
  • 烟波钓叟歌
  • React-setState杂记
  • Android开发学习笔记:浅谈GridView
  • 我从来不理解JavaScript闭包,直到有人这样向我解释它...
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • ES6--对象的扩展
  • October CMS - 快速入门 9 Images And Galleries
  • rc-form之最单纯情况
  • Redis 中的布隆过滤器
  • redis学习笔记(三):列表、集合、有序集合
  • Spring核心 Bean的高级装配
  • supervisor 永不挂掉的进程 安装以及使用
  • vue 配置sass、scss全局变量
  • webpack4 一点通
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 简析gRPC client 连接管理
  • 前嗅ForeSpider教程:创建模板
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 设计模式(12)迭代器模式(讲解+应用)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 06-01 点餐小程序前台界面搭建
  • const的用法,特别是用在函数前面与后面的区别
  • 说说我为什么看好Spring Cloud Alibaba
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #控制台大学课堂点名问题_课堂随机点名
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (十六)串口UART
  • (转)jdk与jre的区别
  • (转)shell中括号的特殊用法 linux if多条件判断
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 的程序集加载上下文
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • @RequestBody与@ResponseBody的使用
  • [ C++ ] STL_list 使用及其模拟实现
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [2]十道算法题【Java实现】
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [c#基础]DataTable的Select方法