最近我开始使用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”在优先级队列构造函数中意味着什么?(我传递但我不知道它的作用)
我搜索了互联网,发现它用于指定初始容量,但仍无法清楚地理解它。
任何人都能解释一下它的作用吗?
感谢您的时间。
答案 0 :(得分:4)
这是'PriorityQueue'的初始容量。 如果你有这样的疑问,你应该参考official documentation of the class。
它用于您事先知道需要多少空间的情况(至少在开头),以便实例化对象可以分配足够的内存来存储该数量的元素,而不必浪费时间分配较少的数量内存(为了节省空间),然后花一些时间来分配新的内存。
答案 1 :(得分:0)
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)