2013-07-11 89 views
-1

最近我已經開始在java中使用優先級隊列,並且我已經發現了自己似乎並不瞭解的東西。我用比較類以我的方式對優先級隊列進行排序。優先級隊列構造函數中的參數

下面是一個簡單的程序,我所做的: -

package main; 

import java.util.Comparator; 
import java.util.PriorityQueue; 

class PQ implements Comparator<Integer> { 

    public int compare(Integer o1, Integer o2) { // sort in the descending order 
    return o2 - o1; 

    } 
} 

public class Main { 

    public static void main(String[] args) { 
    int[] list = { 1, 5, 6, 9, 10, 3, 5, 2, 13, 15, 17, 19, 25, 1, 0 }; 
    PQ pqs = new PQ(); 

    PriorityQueue<Integer> pq1 = new PriorityQueue<Integer>(10, pqs); 
    // what does this "10" parameter does? 

    for (int x : list) { 
     pq1.offer(x); // put values in to the queue 
    } 

    for (int x : list) { 
     System.out.println(pq1.poll()); // pops out from the queue. 
    } 
    } 
} 

我的問題是什麼呢整數參數「10」是指在優先級隊列構造(想過去,但我不知道是什麼?它)

我搜查了互聯網,發現它用來指定初始容量,但仍然無法清楚地理解它。

任何人都可以解釋我做了什麼嗎?

謝謝你的時間。

回答

4

這是'PriorityQueue'的初始容量。 當你有這樣的疑惑時,你應該參考official documentation of the class

它用於事先知道需要多少空間的情況(至少在開始時),以便實例化對象可以分配足夠的內存來存儲該數量的元素,而不必浪費時間分配較小的數量的內存(節省空間),然後花費一些時間根據需要分配新內存。

0

A PriorityQueue支持Object[]。默認情況下,此數組的大小爲11,但只要添加的元素多於它所能容納的大小,就必須調整其大小(一個O(n)操作)。你經由int構造參數來指定此數組的初始大小,大概是爲了避免這樣的調整大小操作:

147  public PriorityQueue(int initialCapacity, 
148       Comparator<? super E> comparator) { 
149   // Note: This restriction of at least one is not actually needed, 
150   // but continues for 1.5 compatibility 
151   if (initialCapacity < 1) 
152    throw new IllegalArgumentException(); 
153   this.queue = new Object[initialCapacity]; // <-- 
154   this.comparator = comparator; 
155  } 

source