`
cakin24
  • 浏览: 1341974 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

比较标准的队列实现类PriorityQueue

    博客分类:
  • java
 
阅读更多

PriorityQueue是一个比较标准的队列实现类,之所以说它是比较标准的队列实现,而不是绝对标准的队列实现。是因为:PriorityQueue保存队列元素的顺序并不是按加入队列的顺序,而是按队列元素的大小进行重新排序。因此当调用peek方法或者poll方法来取出队列中的元素时,并不是取出最先进入队列的元素是,而是取出队列中最小的元素。
1 代码示例

import java.util.*;

public class PriorityQueueTest
{
	public static void main(String[] args)
	{
		PriorityQueue pq = new PriorityQueue();
		// 下面代码依次向pq中加入四个元素
		pq.offer(6);
		pq.offer(-3);
		pq.offer(20);
		pq.offer(18);
		// 输出pq队列,并不是按元素的加入顺序排列
		System.out.println(pq); // 输出[-3, 6, 20, 18]
		// 访问队列第一个元素,其实就是队列中最小的元素:-3
		System.out.println(pq.poll());
		System.out.println(pq.poll());
		System.out.println(pq.poll());
		System.out.println(pq.poll());
	}
}

2 运行结果
[-3, 6, 20, 18]
-3
6
18
20

3 代码分析
运行代码输出PriorityQueue集合时,可能看到该队列里的元素并没有很好地按大小进行排序,但这只是受到PriorityQueue的toString方法的返回值的影响。实际上,程序多次调用PriorityQueue集合对象的poll方法时,即可看到元素从小到大的顺序“移出队列”。

分享到:
评论

相关推荐

    PriorityQueue:基于二进制堆的PriorityQueue实现

    PriorityQueue 优先队列实现C# PriorityQueueLib: 基于二进制堆的最小/最大优先级队列实现PriorityQueueTests: PriorityQueue单元测试

    PriorityQueue:使用 O(LogN) 复杂度为测试类实现 PriorityQueue

    优先队列使用 O(LogN) 复杂度为测试类实现 PriorityQueue。

    Java并发编程:阻塞队列

     在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。  使用非阻塞队列的时候有一个很大问题是:它不会对当前线程产生阻塞,那么在面对类似...

    JavaScript数据结构之优先队列与循环队列实例详解

    //创建一个类来表示优先队列 function Priorityqueue(){ var items=[];//保存队列里的元素 function QueueEle(e,p){//元素节点,有两个属性 this.element=e;//值 this.priority=p;//优先级 } this.enqueue=fun

    Java面试题,冲冲冲!.rar

    每天一道面试题,周五冲冲冲!...- 常见实现类有LinkedList、ArrayDeque和PriorityQueue等。 4. Map(映射): - 使用键值对(key-value)的方式存储元素。 - 键是唯一的,不允许重复,每个键关联一个值。

    基础深化和提高-java容器

    在Java中,容器(Container)指的是...Map用于存储键值对(Key-Value Pair)的数据,它的实现类有HashMap、TreeMap、LinkedHashMap等。Map中的键是唯一的,每个键对应一个值。通过键可以快速查找对应的值,这使得Map

    Python实现一个优先级队列的方法

    下面的类利用 heapq 模块实现了一个简单的优先级队列: import heapq class PriorityQueue: def __init__(self): self._queue = [] self._index = 0 def push(self, item, priority): heapq.heappush(self._...

    algorithm-notes

    类 PriorityQueue<E> 一个基于优先级堆的无界优先级队列。 此队列的头 是按指定排序方式确定的最小 元素。 实现注意事项: 此实现为排队和出队方法(offer、poll、remove() 和 add)提供 O(log(n)) 时间; 为 remove...

    数据结构各种算法实现(C++模板),doc,代码可以直接拷出来用,321页,18大类的数据结构和算法

    PriorityQueue.h 80 Test.cpp 85 10、串 88 MyString.h 88 MyString.cpp 90 test.cpp 101 11、二叉树 104 BinTreeNode.h 104 BinaryTree.h 112 Test.cpp 124 12、线索二叉树 126 ThreadNode.h 126 ThreadTree.h 128 ...

    MaxHeap:我的最大堆类的存储库

    寻求使用优先队列的人应该使用 Java 已经提供的类:java.util.PriorityQueue 介绍。 优先级队列是一种数据类型,其中每个元素都有一个与之关联的“优先级”。 在优先级队列中,优先级较高的元素在优先级较低的元素...

    javaSE代码实例

    17.5.2 PriorityQueue类的知识与使用 397 17.5.3 BlockingQueue接口介绍 399 17.6 阻塞的栈操作 401 17.6.1 BlockingDeque接口与LinkedBlockingDeque类简介 401 17.6.2 LinkedBlockingDeque类的具体使用 ...

    Java开发技术大全 电子版

    11.2.3优先队列(PriorityQueue)使用示例340 11.2.4哈希集合(HashSet)使用示例343 11.2.5哈希映射类(HashMap)使用示例347 11.2.6有序树(TreeSet)使用示例349 11.2.7有序树映射类(TreeMap)使用示例353 ...

    Java并发编程(学习笔记).xmind

    某些应用程序中存在比较明显的任务边界,而在其他一些程序中则需要进一步分析才能揭示出粒度更细的并行性 任务的取消和关闭 任务取消 停止基于线程的服务 处理非正常的线程终止 JVM关闭 线程池...

Global site tag (gtag.js) - Google Analytics