2012-05-23 27 views
1

在下面的代码中,我想知道在创建PrioriyQueue时的意义。我知道它的初始容量,但会影响性能吗?Java中的PriorityQueue说明

import java.util.*; 

class Test { 
    static class PQsort implements Comparator<Integer> { // inverse sort 
     public int compare(Integer one, Integer two) { 
      return two - one; // unboxing 
     } 
    } 

    public static void main(String[] args) { 
     int[] ia = { 1, 5, 3, 7, 6, 9, 8 }; // unordered data 
     PriorityQueue<Integer> pq1 = new PriorityQueue<Integer>(); // use 
                    // natural 
                    // order 
     for (int x : ia) 
      pq1.offer(x); 
     for (int x : ia) 
      // review queue 
      System.out.print(pq1.poll() + " "); 
     System.out.println(""); 
     PQsort pqs = new PQsort(); // get a Comparator 
     PriorityQueue<Integer> pq2 = new PriorityQueue<Integer>(10, pqs); // use 
                      // Comparator 
     for (int x : ia) 
      // load queue 
      pq2.offer(x); 
     System.out.println("size " + pq2.size()); 
     System.out.println("peek " + pq2.peek()); 
     System.out.println("size " + pq2.size()); 
     System.out.println("poll " + pq2.poll()); 
     System.out.println("size " + pq2.size()); 
     for (int x : ia) 
      // review queue 
      System.out.print(pq2.poll() + " "); 
    } 
} 
+0

你考虑阅读的Javadoc您发布过吗?而不是发布? – EJP

回答

1

Javadoc说明:

优先级队列是无界的,但具有管理用于存储队列中的元素的数组的大小的内部容量。它总是至少与队列大小一样大。随着元素被添加到优先级队列中,其容量会自动增加。增长政策的细节没有说明。

换句话说,如果发现队列花费太多时间来增长内部阵列,能够指定初始容量是一种优化性能的方法。

+0

你可能对ArrayList(和其他一些集合)有同样的问题:http://stackoverflow.com/questions/3564837/capacity-of-arraylist –