JAVA中常用的Queue的介绍

目录

1. java中队列的分类以及队列的介绍

2. PriorityQueue队列的介绍

2.1 PriorityQueue继承结构和方法解读

2.2 PriorityQueue的构造器的实现

3. Deque(双向队列)的简单介绍

3.1 ArrayDeque和LinkedList的介绍


1. java中队列的分类以及队列的介绍

常见的队列主要分为单向队列和双向队列,单向队列(Queue接口)的主要实现类是PriorityQueue(优先队列)。双向队列(Dequeue)的实现类主要有LinkedList和ArrayDeque。

2. PriorityQueue队列的介绍

2.1 PriorityQueue继承体系及方法

对于Queue我们通过查看源码可以看出,该接口一共定义了6种方法,其中add()和offer()方法返回的是boolean值,而remove(),poll(),element(),peek()返回的是元素。

我们首先查看源码中PriorityQueue队列的继承结构,我们可以看到PriorityQueue是实现了Queue接口的,而且PriorityQueue类实现了Serializable接口,可以实现序列化的功能,能够方便PriorityQueue的序列化传输:

我们继续观察源码中PriorityQueue类中一些方法,如下图所示,在PriorityQueue的构造类中有Comparator比较器,也代表着我们构造的PriorityQueue优先队列不仅仅可以是默认的小根堆的,还可以自定义队列中元素的比较方法,以及是小根堆还是大根堆都可以通过构造函数自定义。

而且因为PriorityQueue还继承了AbstractQueue这个类,因此在PriorityQueue的方法中还有contains()可以判断在PriorityQueue类中是否存在某一个元素。toArray()方法也可以使得PriorityQueue和Array很方便的转换。

2.2 PriorityQueue的构造器的实现

我们测试了Integer作为队列中的元素实现优先队列中的小根堆和大根堆的效果,并且还测试了在使用int数组作为队列中的元素时,如何编写队列的比较器,具体的效果如下所示。

3. Deque(双向队列)的简单介绍

3.1 ArrayDeque和LinkedList的介绍

ArrayDequeue和LinkedList都实现了Deque(双向队列接口)所以对于这两个队列实现类都有Collection中的addFirst(),addLast(),offerFirst()和offerLast()等功能。也就是说ArrayDeque和LinkedList都可以实现对队列的双向加入和删除等功能。

我们再看底层实现对比,对于ArrayDeque的底层实现时通过Object[]进行实现的,然后定义head和tail两个标记对Object[]进行操作,对于LinkedList是通过定义两个Node节点first和last对链表进行操作。Node有指向下一个元素和上一个元素的指针,还记录了自身的值,对于LinkedList来说双向队列是通过两个Node节点实现的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1篇 Java编程基础   第1章 Java开发环境的搭建(教学视频:9分钟) 2   1.1 理解Java 2   1.2 搭建Java所需环境 3   1.2.1 下载JDK 3   1.2.2 安装JDK 4   1.2.3 配置环境 5   1.2.4 测试JDK配置是否成功 7   实例1 开发第一个Java程序 7   第2章 Java基础类型与运算符(教学视频:39分钟) 9   2.1 基础类型 9   实例2 自动提升 9   实例3 自动转换 10   实例4 常用基础类型之强制转换 11   2.2 运算符 12   实例5 算术运算符 12   实例6 关系运算符 13   实例7 逻辑运算符 14   实例8 位运算符 15   实例9 移位运算符 16   实例10 转型运算符 17   2.3 其他形式 18   实例11 常量与变量 18   实例12 各种进制的转换 19   实例13 Java的进制与移位运算符 22   第3章 条件控制语句(教学视频:75分钟) 26   3.1 if控制语句 26   实例14 判断输入的年份是否为闰年 26   实例15 抽奖活动 27   3.2 for语句 28   实例16 小九九乘法表 28   实例17 如何列出素数 29   实例18 Java的递归 31   实例19 男生女生各多少人 32   实例20 求水仙花数 34   实例21 求任意一个正数的阶乘 35   实例22 求n的n次方 35   实例23 利用for循环输出几何图形 36   实例24 杨辉三角 38   3.3 while语句 39   实例25 求1到100之间的和 39   实例26 存上100元需要多少天 40   实例27 输出100之间的所有偶数 41   实例28 如何判断回文数字 42   3.4 do…while语句 43   实例29 输出100之间的所有奇数 44   实例30 求最大的随机数 44   3.5 switch语句 45   实例31 判断字母分类 46   实例32 优良及差 47   实例33 打印任意一年日历 48   实例34 一年四季的划分 51   第2篇 Java数据处理   第4章 异常处理(教学视频:62分钟) 54   4.1 编译时异常 54   实例35 除0发生的算术异常(ArithmeticException) 54   实例36 数组下标越界异常(ArrayIndexOutOfBoundsException) 55   实例37 数组元素类型不匹配异常(ArrayStoreException) 56   实例38 强制类型转换异常(ClassCastException) 56   实例39 索引越界异常(IndexOutOfBoundsException) 57   实例40 空指针异常(NullPointerException) 58   实例41 数字格式转换异常(NumberFornatException) 59   实例42 字符串索引越界异常(StringIndexOutBounds) 60   实例43 操作错误(UnsupportedOperationException) 60   4.2 运行时异常 61   实例44 找不到指定类时发生的异常(ClassNotFoundException) 62   实例45 请求的方法不存在(NoSuchMethodException) 63   4.3 try…catch捕获异常 65   实例46 try…catch捕获异常的实例 66   实例47 try…catch…finally捕获异常的实例 67   实例48 try…catch嵌套捕获异常的实例 68   4.4 throws声明异常 69   实例49 throws声明异常实例一 69   实例50 throws声明异常实例二 70   4.5 throw抛出异常 72   实例51 throw抛出异常实例一 72   实例52 throw抛出异常实例二 73   4.6 自定义异常 74   实例53 自定义异常实例一 74   实例54 自定义异常实例二 75   第5章 数组(教学视频:98分钟) 78   5.1 一维数组 78   实例55 一

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值