java的优先级队列使用方法,java实现优先队列

  java的优先级队列使用方法,java实现优先队列

  这篇文章带给你一些关于java的知识,包括关于PriorityQueue的知识。Java集合框架中有两种优先级队列:PriorityQueue和PriorityBlockingQueue。PriorityQueue是线程不安全的,而PriorityBlockingQueue是线程安全的。下面就让我们一起来看看,希望对你有所帮助。

  如何解决写爬虫IP受阻的问题?立即使用。

  Java集合框架中priorityQueue的关系如下:

  :

一、使用PriorityQueue的注意点

   1.使用时,必须导入PriorityQueue所在的包,即:

  2.放在优先级队列中的元素必须能够比较大小,不能比较大小的对象不能插入,否则会被抛出。

  ClassCastException异常

  3.不能插入null对象,否则会抛出NullPointerException。

  4.没有容量限制,可以插入任意数量的元素,其内部容量可以自动扩展。

  5.时间复杂度为log以2为底的n用于插入和删除元素

  6.堆数据结构用在优先级队列的底部

  7.默认情况下,PriorityQueue是一个小堆——也就是说,获得的每个元素都是最小的元素(想要变成大堆,需要我们重新比较方法、默认的比较方法是Comparable接口中的compareTo方法)

  

二、PriorityQueue常用接口介绍

  

1. 优先级队列的构造

  此处仅列出PriorityQueue中常见的几种构造方式。其他请参考帮助文档。

  Ken0@166.com:

2、PriorityQueue中对元素的比较

  看完施工方法,再来重新思考一个问题。

  优先级队列是如何排序的?因为优先级队列是由小根堆实现的。

  在实现小根堆的过程中,我们知道必须有元素比较,所以PriorityQueue中的元素必须能够比较大小。那么PriorityQueue如何比较元素呢?

  我们看到这里的程序报告了一个错误。为什么?因为我们插入的子对象不具有可比性(即没有实现Comparable接口又没有采用自定义的比较器)

  能看见

   即我们采用了默认的比较方法Comparable接口中的compareTo方法

  现在让我们再来看看错误消息。

  看来是在往PriorityQueue中插入元素的时候出现了问题

  然后我们打开PriorityQueue的源代码看一下(下面是PriorityQueue中offer方法的源码)

  看看shiftUp的源代码。

  继续点击,siftUpComparable

  此时,让我们回头看看放在PriorityQueue中的子对象。当然他即没有自定义比较器又没有实现Comparable接口,给出错误!

  好吧,让我们在子类中实现Comparable接口来按年龄进行比较。

  如果我们想实现大根桩,很容易做到。

  上面我们已经实现了Compable接口,那么如果我们定制一个年龄比较器呢?

  

3、插入/删除/获取优先级最高的元素

  推荐在

函数名功能介绍
boolean

   offer(E e)

插入元素e,插入成功返回true,如果e对象为空,抛出NullPointerException异常,时

   间复杂度 ,注意:空间不够时候会进行扩容

E peek()获取优先级最高的元素,如果优先级队列为空,返回null
E poll()移除优先级最高的元素并返回,如果优先级队列为空,返回null
int size()获取有效元素的个数
void

   clear()

清空
boolean

  isEmty()

  

检测优先级队列是否为空,为空返回true
学习:《java视频教程》以上是Java集合框架中PriorityQueue的详细内容。更多信息请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: