import java.util.*;
public class TestPriorityQueue
{
public static void main(String[] args)
{
PriorityQueue pq = new PriorityQueue();
//下面代码依次向pq中加入四个元素
pq.offer(6);
pq.offer(-3);
pq.offer(9);
pq.offer(0);
//输出pq队列,按元素的大小顺序排列
System.out.println(pq);
for(int = 0;i<=pq.size();i++)
System.out.println(pq.remove());
}
}
输出的结果:-3 0 9 6
-3 0 6
怎么会是这样的结果,而不是这样的:-3 0 6 9
-3 0 6 9
帮我解答下!
System.out.println(pq.remove());pq.remove()执行之后pq.size()也改变了。当for循环执行到i=3时pq.size()等于1,不满足for循环条件所以跳出了for循环,故没有打印出9。
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 自己实现个比较器,而PriorityQueue默认的比较是这样的,源码 if (comparator == null) {
while (k > 1) {
int j = k >> 1;
if (((Comparable<E>)queue[j]).compareTo((E)queue[k]) <= 0)
break;
Object tmp = queue[j]; queue[j] = queue[k]; queue[k] = tmp;
k = j;
}
}比较的顺序 6 -3 9 0
-3 6 9 0
-3 0 9 6
自己看看