对排序

Timer源码之TaskQueue

依然范特西╮ 提交于 2020-01-07 04:49:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> TaskQueue类是在Timer文件中的TaskQueue,它是一个又堆实现的优先队列。TaskQueue按任务剩下一次执行时间排序的优先级队列,使用的数据结构是小顶堆(保证堆顶的元素最小) 堆的性质并不保证有序,只是保证能在O(1)找到最小值(小顶堆)或者最大值(大顶堆) 堆本质上是一个完全二叉树,保证了根节点总是比叶子节点大或者小。因为这个优先级队列主要是由来存放TimerTask的,所以它使用的是一个TimerTask的数组来实现的。 import java.util.Arrays; import java.util.TimerTask; class TaskQueue { /** * 使用数组存为,数据是TimerTask类型 */ private TimerTask[] queue = new TimerTask[128]; /** * 任务队列的大小,queue[0]没有使用,queue[1]-queue[size]是排好序的 */ private int size = 0; int size() { return size; } /** * */ TimerTask getMin() { return queue[1]; } TimerTask get(int i) { return queue