首先来看名字:
优先队列:
说到底还是一种队列 不过是一种特殊的队列
他的工作就是poll()/peek()出队列中最大/最小的那个元素
堆:
首先我们要明确:堆是一个很大的概念 他并不一定是完全二叉树 我们之前用完全二叉树是因为这个很容易被数组储存(index: index * 2是右子节点 index*2+1是左子节点)正因为这样 所以大部分时间我们用完全二叉树(数组)来储存堆,但是除了这种二叉堆之外 我们还有二项堆 斐波那契堆 这种堆就不属于二叉树
优先对列和堆有什么区别呢?
这里面说的堆默认我们最常使用的二叉堆,而二叉堆只是优先队列的一种是实现方式而已。那么优先队列还有哪些实现方式呢?
还有:二项堆 平衡树 线段树 甚至用二进制分组的vector来实现一个优先对列。
所以说 优先队列和堆不是一个同level的概念 如果非要说 他们之间的关系就是:二叉堆只是优先队列的一种实现方式,而java的PriorityQueue也是基于这个实现的。