当前位置:首页 > 英文周记 > 正文内容

priorityqueue「PriorityQueue排序规则」

更新时间:2026-07-18 17:53:10 周记网3年前 (2023-03-06)英文周记87

java priorityqueue 哪些方法

1.下表显示了jdk1.5中的阻塞队列的操作:

add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常

priorityqueue「PriorityQueue排序规则」

remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常

element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常

offer 添加一个元素并返回true 如果队列已满,则返回false

poll 移除并返问队列头部的元素 如果队列为空,则返回null

peek 返回队列头部的元素 如果队列为空,则返回null

put 添加一个元素 如果队列满,则阻塞

take 移除并返回队列头部的元素 如果队列为空,则阻塞

remove、element、offer 、poll、peek 其实是属于Queue接口。

2.阻塞队列的操作可以根据它们的响应方式分为以下三类:aad、removee和element操作在你试图为一个已满的队列增加元素或从空队列取得元素时 抛出异常。当然,在多线程程序中,队列在任何时间都可能变成满的或空的,所以你可能想使用offer、poll、peek方法。这些方法在无法完成任务时 只是给出一个出错示而不会抛出异常。

注意:poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的。

3.还有带超时的offer和poll方法变种,例如,下面的调用:

boolean success = q.offer(x,100,TimeUnit.MILLISECONDS);

尝试在100毫秒内向队列尾部插入一个元素。如果成功,立即返回true;否则,当到达超时进,返回false。同样地,调用:

Object head = q.poll(100, TimeUnit.MILLISECONDS);

如果在100毫秒内成功地移除了队列头元素,则立即返回头元素;否则在到达超时时,返回null。

4.最后,我们有阻塞操作put和take。put方法在队列满时阻塞,take方法在队列空时阻塞。

java.ulil.concurrent包提供了阻塞队列的4个变种。默认情况下,LinkedBlockingQueue的容量是没有上限的(说的不准确,在不指定时容量为Integer.MAX_VALUE,不要然的话在put时怎么会受阻呢),但是也可以选择指定其最大容量,它是基于链表的队列,此队列按 FIFO(先进先出)排序元素。

ArrayBlockingQueue在构造时需要指定容量, 并可以选择是否需要公平性,如果公平参数被设置true,等待时间最长的线程会优先得到处理(其实就是通过将ReentrantLock设置为true来 达到这种公平性的:即等待时间最长的线程会先操作)。通常,公平性会使你在性能上付出代价,只有在的确非常需要的时候再使用它。它是基于数组的阻塞循环队 列,此队列按 FIFO(先进先出)原则对元素进行排序。

PriorityBlockingQueue是一个带优先级的 队列,而不是先进先出队列。元素按优先级顺序被移除,该队列也没有上限(看了一下源码,PriorityBlockingQueue是对 PriorityQueue的再次包装,是基于堆数据结构的,而PriorityQueue是没有容量限制的,与ArrayList一样,所以在优先阻塞 队列上put时是不会受阻的。虽然此队列逻辑上是**的,但是由于资源被耗尽,所以试图执行添加操作可能会导致 OutOfMemoryError),但是如果队列为空,那么取元素的操作take就会阻塞,所以它的检索操作take是受阻的。另外,往入该队列中的元 素要具有比较能力。

什么是Java优先级队列(PriorityQueue)?

PriorityQueue是一个基于优先级堆的**队列,它的元素是按照自然顺序(naturalorder)排序的。在创建的时候,可以给它提供一个负责给元素排序的比较器。PriorityQueue不允许null值,因为他们没有自然顺序,或者说他们没有任何的相关联的比较器。最后,PriorityQueue不是线程安全的,入队和出队的时间复杂度是O(log(n))。

PriorityQueue队列的使用

典型的生产消费者模型都存在队列的概念,在python语言中,提供了queue标准库,该库包含了Queue、FIFO和PriorityQueue三种类型的队列。

优先级处理的对列使用PriorityQueue,使用方法和Queue类似,区别在于放入队列的数据会进行排序,优先级高的数据会优先取出。

其中,priority为优先级字段,类型为int,数字越小,优先级越高;item为数据字段,可为任意类型。

put数据为数据类构造。

输出结果为:

从结果可以看到优先级为0的数据最先取出。

标签: priorityqueue

“priorityqueue「PriorityQueue排序规则」” 的相关文章

priorityqueue「c++队列priorityqueue」

priorityqueue「c++队列priorityqueue」

优先队列(PriorityQueue) 在数据结构中,普通的队列是先进先出,但有时我们可能并不想有这么固定的规矩,我们希望能有一个带优先级的队列。考虑在现实生活中,一些服务排队窗口会写着“军人依法优...

priorityqueue「priorityqueue用法 java」

priorityqueue「priorityqueue用法 java」

java priorityqueue 哪些方法 1.下表显示了jdk1.5中的阻塞队列的操作:add 增加一个元索 如果队列已满,则抛出一个III...

priorityqueue「priorityqueue自定义排序」

priorityqueue「priorityqueue自定义排序」

PriorityQueue队列的使用 典型的生产消费者模型都存在队列的概念,在python语言中,提供了queue标准库,该库包含了Queue、FIFO和PriorityQueue三种类型的队列。 优...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。