DelayedWorkQueue优先队列
该队列是定制的优先级队列,只能用来存储RunnableScheduledFutures任务。堆是实现优先级队列的最佳选择,而该队列正好是基于堆数据结构的实现。
1.关于堆的一些知识
堆结构是用数组实现的二叉树,数组下标可以表明元素节点的位置,所以省去指针的内存消耗;堆内元素节点的位置取决于节点的某一个属性的大小值,根据父节点是否大于左右节点分为最小堆和最大堆。即二叉树根节点最小则为最小堆,二叉树根节点最大则为最大堆;下面是最小堆和最大堆的示例:
最小堆中,父节点都小于左右节点;其数组形式:[1, 5, 8, 6, 10, 11, 20]
最大堆总,父节点都大于左右节点;其数组形式:[20, 10, 15, 6, 9, 10, 12]
2.堆的一些属性
- 堆都是满二叉树.因为满二叉树会充分利用数组的内存空间;
- 最小堆是指父节点比左节点和右节点都小的结构,所以整个最小堆中,根节点是最小的节点;
- 最大堆是指父节点比左节点和右节点都大的结构,所以整个最大堆中,根节点是最大的节点;
- 最大堆和最小堆的左节点和右节点没有关系,只能判断父节点和左右两节点的大小关系;
基于堆的这些属性,堆适用于找到集合中的最大或者最小值;另外,堆结构记录任务及其索引的关系,便于插入数据或者删除数据后重新排序,所以堆适用于优先队列。