这里的堆是一种特殊的二叉树,不是java中用关键字new得到的计算机内存中的可用空间。
堆的特点:
1.它是完全二叉树,除了树的最后一层节点不需要是满的,其他的 每层从左到右都完全是满的;
2.通常用一个数组表示;
3.堆中的每个节点都满足堆的条件,即每个节点的关键字都大于或 等于这个节点的子节点的关键字。 堆是完全二叉树的事实说明表示堆的数组中的下标对应的每个单元 都有值。

扩展堆数组 在程序运行过程中,如果插入太多的数据项,超出了堆数组的容 量,可以创建一个新的数组,把数据从就数组中复制到新的数组。 和哈希表的情况不同,改变堆的大小不需要重新排列数据。执行复 制操作的时间是线性的,但是增大数组容量的操作并不会经常发 生,特别是当每次扩展数组容量时,数组的容量都充分的增大了。
在java中,用Vector类对象取代了数组对象,Vector类对象可以动 态的扩展。

效率: 对于有足够多数据的堆来说,向上筛选和向下筛选算法是所有操作 中最耗时的部分,这两个算法的时间都花费在一个循环中,沿着一 条路径重复的向上或向下移动节点,所需的复制次数和堆的高度有 关。
堆是一种树,由它实现的优先级队列的插入和删除时间复杂度都是 O(logN),删除的时间虽然变慢了,但插入的时间快多了。当堆速 度有要求,且有很多插入操作时,可以选择堆来实现优先级队列。