专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java基础学习:什么是java优先队列

Java基础学习:什么是java优先队列

更新时间:2020-04-08 12:27:14 来源:动力节点 浏览2037次


    该PriorityQueue中是很重要的一个Java的建立在无界优先级队列和优先级堆的API。本文通过适当的代码示例介绍了有关此API及其使用的一些复杂信息。


    概观


    的的PriorityQueue类是一部分的java.util包,是一个通用的实现Java中的基于优先级的队列。甲队列基本上是一个数据结构,用于定义特定规范来插入和从存放物品的检索的处理。这个想法非常类似于许多人站在队列中说,获得一张票。站在队列中的第一个人获得了获得机票的第一个机会,最后一个人获得了一个机会。人们被添加到队列的末尾或尾端。向队列添加项目在技术上称为入队过程,从队列中删除的项目来自行中的第一个项目。这被称为出队。我们的想法是以FIFO(先进先出)的方式对元素进行排序。


    现在,这是最简单的架构,并且紧密地定义了队列实际意味着什么以及如何在计算机中进行模拟。甲商店通常由一个简单的阵列,其中所述存储和检索过程有这样的定义范数表示。优先级队列强加了一些特殊规范。我们将看到更多的内容。


    Java实现队列


    JavaAPI在java.util包中具有通用接口名称Queue<E>。这是JavaCollectionFrameworkAPI的一部分,旨在在处理之前保存元素。作为Collection的一部分,它具有所有基本的Collection操作。特定于其身份的操作涉及插入,提取和检查存储在其中的元素。这些操作中的每一个都有两种不同的形式,例如,如果操作失败则抛出异常,另一种返回特殊值,例如null或false,具体取决于操作。注意与典型队列不同,JavaQueue的具体实现不一定以FIFO方式排序元素。对于基于优先级的队列尤其如此,其中元素的排序是根据提供的比较器或自然顺序完成的。但无论顺序如何,remove()或poll()方法将始终检索队列头部的元素。这两种不太可能的方法之间的具体区别似乎是一个类似的方法是一个抛出异常(NoSuchElementException)失败,而后者返回(null),一个特殊的值。


Java基础学习:什么是java优先队列


    请注意,Queue<E>接口不适合在并发编程中使用,因为它没有定义阻塞队列方法,其中enqueue和dequeue进程等待元素出现在队列中或大小可用。有一个名为BlockingQueue<E>的特定接口,它扩展了Queue<E>接口并解决了这些问题。


    有一个名为AbstractQueue<E>的抽象类,它提供了一些队列操作的部分实现。所述的PriorityQueue<E>类是这个抽象类的直接延伸。


    优先级队列


    优先级队列的Java实现是一种特殊类型的队列,其中元素的排序由其自然排序原则确定或根据创建期间提供的比较器定制。我们在构造期间调用的构造函数决定了与优先级队列一起使用的排序原则。与Queue<E>不同,它不允许null元素,但是某些实现-例如LinkedList-do也不禁止插入null元素。但是,PriorityQueue<E>根本不允许使用null元素。如果优先级队列是根据自然顺序构造的,则会抛出任何不可比较的元素插入ClassCastException。


    它被声明是无限的并且基于优先级堆。虽然队列的大小被称为无界,但是有一个内部容量来确定数组的大小。插入元素时,此大小会自动增大。但是,没有具体说明尺寸增加的原则的细节。


    有七种类型的重载构造函数,我们可以通过它们设置参数来指定队列的初始容量,为Comparator提供指定元素的自定义排序,或者使用无参数构造函数接受默认值。


    PriorityQueue中()


    PriorityQueue(intinitialCapacity)


    PriorityQueue(intinitialCapacity,Comparator<?SuperE>comparator)


    PriorityQueue(Commection<?extendsE>c)


    PriorityQueue(比较器<?SuperE>比较器)


    PriorityQueue(PriorityQueue<?extendsE>c)


    PriorityQueue(SortedSet<?extendsE>c)


    与Queue<E>类似,PriorityQueue<E>也不同步,因此应在并发编程中谨慎使用。但是,有一个同步替代它,称为PriorityBlockingQueue<E>。这与PriorityQueue<E>的工作方式相同,只是具有线程安全的附加资格。


    PriorityQueue<E>中定义的操作与Queue<E>相同,但增加了一些。


Java基础学习:什么是java优先队列


    快速示例#1


    让我们用一个简单的程序实现PriorityQueue<E>的一些操作。


Java基础学习:什么是java优先队列


    产量


Java基础学习:什么是java优先队列


    快速示例#2


    这是另一个自定义比较器的快速示例。


Java基础学习:什么是java优先队列


    产量


Java基础学习:什么是java优先队列


    结论


    优先级队列的附加规范是从列表中删除的项具有最高优先级。Java将优先级规则强加给普通队列的方式是附加元素的排序原则。此订单可以根据程序员的要求进行自定义,也可以设置为默认。这是Java中优先级队列实现的本质。


  以上就是动力节点java培训机构的小编针对“Java基础学习:什么是java优先队列”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>