-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

2 回答 2

4

它是“PriorityQueue”的初始容量。当您有这样的疑问时,您应该参考该类的官方文档

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

于 2013-07-11T13:29:01.117 回答
0

APriorityQueueObject[]. 默认情况下,该数组的大小为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       }

来源

于 2013-07-11T13:32:57.733 回答