日期:2014-05-20  浏览次数:20793 次

PriorityQueue的方法求助
import java.util.*;
class TestPQ{
public static void main(String[] args) {
PriorityQueue<String> pq = new PriorityQueue<String>();
pq.add("2");
pq.add("4");
System.out.print(pq.peek() + " ");
pq.offer("1");
pq.add("3");
pq.remove("1");
System.out.print(pq.poll() + " ");
if(pq.remove("2")) System.out.print(pq.poll() + " ");
System.out.print(pq.poll() + " " + pq.peek());
}
}

这是一道SCJP的练习题,7 - 9
给的答案是 2 2 3 4
自己run的结果也是 2 2 3 4
但是不知道为何不是 2 2 4 3
请高手赐教。非常感谢。

------解决方案--------------------
探讨

是因为按自然顺序,3排在4之前,所以3的优先级比4高,所以先处理3吗?

------解决方案--------------------
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 使用指定的初始容量创建一个 PriorityQueue,并根据指定的比较器来排序其元素。

直接用不带参数的构造方法,那么就是默认的顺序了。

同学你可以看看API的嘛,另外数据结构的优先队列,实现也不是很难。
------解决方案--------------------
这个队列称为优先队列,往里面放的对象谁的优先级别高谁可以插队被先取出来。

优先级根据对象的 Comparable 的比值,或者 Comparator 的比值来确定