优先级队列(Priority Queue)

1、接口设计

优先级队列也是一个队列,所以接口设计如下:

public class PriorityQueue {

    // 元素的数量
    public int size() ;

    // 是否为空
    public boolean isEmpty() ;

    // 清空
    public void clear() ;

    // 队尾入队
    public void enQueue(E element) ;

    // 队头出队
    public E deQueue() ;

    // 获取队首元素
    public E front() ;
}

普通的队列是FIFO元素,先进先出,而优先级队列是按照优先级高低进行出队的,比如将优先级高的元素作为队头元素出队。
根据这个性质,可以使用完全二叉堆进行实现。使用Comparator来定义优先级的高低。

public class PriorityQueue {
    private BinaryHeap heap;

    public PriorityQueue() {
        this(null);
    }

    public PriorityQueue(Comparator comparator) {
        heap = new BinaryHeap<>(comparator);
    }

    // 元素的数量
    public int size() {
        return heap.size();
    }

    // 是否为空
    public boolean isEmpty() {
        return heap.isEmpty();
    }

    // 清空
    public void clear() {
        heap.clear();
    }

    // 队尾入队
    public void enQueue(E element) {
        heap.add(element);
    }

    // 队头出队
    public E deQueue() {
        return heap.remove();
    }

    // 获取队首元素
    public E front() {
        return heap.get();
    }
}

你可能感兴趣的:(优先级队列(Priority Queue))