什么是优先队列:
优先队列就好比会员制的队列,有优先级这一特殊属性,根据优先级的高低来确定出队顺序
优先队列也是一种抽象数据类型。优先队列中的每个元素都有优先级,而优先级高(或者低)的将会先出队,而优先级相同的则按照其在优先队列中的顺序依次出队。
也就是说优先队列,通常会有下面的操作:
这样的话,我们完全可以使用链表来实现,例如以O(1)复杂度插入,每次在表头插入,而以O(N)复杂度执行删除最小元素;或者以O(N)复杂度插入,保持链表有序,而以O(1)复杂度删除。
然而优先队列往往使用堆来实现,以至于通常说堆时,就自然而然地想到了优先队列。
具体使用方法(实现方法也就是上述提到到的堆,本文只对使用进行简单说明):
import java.util.PriorityQueue;
public class 优先队列 {
public static void main(String[] args) {
Node a = new Node(0, 0);
Node b = new Node(100, 999);
PriorityQueue<Node> priorityQueue = new PriorityQueue<>();
priorityQueue.add(b);
System.out.println("我是b我先入队");
priorityQueue.add(a);
System.out.println("我是a我后入队");
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.remove());
}
}
}
class Node implements Comparable<Node> {
int u;
int v;
public Node(int u, int v) {
super();
this.u = u;
this.v = v;
}
@Override
public String toString() {
return "Node [u=" + u + ", v=" + v + "]";
}
@Override
public int compareTo(Node o) {
return this.u - o.u;// 数小的在前面
}
}
标签:Node,优先,队列,priorityQueue,int,public
From: https://www.cnblogs.com/ChuenSan/p/17249395.html