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
帮我解答下!

解决方案 »

  1.   

    for(int = 0;i<=pq.size();i++)
    System.out.println(pq.remove());pq.remove()执行之后pq.size()也改变了。当for循环执行到i=3时pq.size()等于1,不满足for循环条件所以跳出了for循环,故没有打印出9。
      

  2.   


    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
    自己看看