优先级队列构造函数中的参数

时间:2013-07-11 13:24:48

标签: java priority-queue comparator

最近我开始使用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”在优先级队列构造函数中意味着什么?(我传递但我不知道它的作用)

我搜索了互联网,发现它用于指定初始容量,但仍无法清楚地理解它。

任何人都能解释一下它的作用吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:4)

这是'PriorityQueue'的初始容量。 如果你有这样的疑问,你应该参考official documentation of the class

它用于您事先知道需要多少空间的情况(至少在开头),以便实例化对象可以分配足够的内存来存储该数量的元素,而不必浪费时间分配较少的数量内存(为了节省空间),然后花一些时间来分配新的内存。

答案 1 :(得分:0)

PriorityQueueObject[]支持。默认情况下,此数组的大小为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