为什么我们必须在PriorityQueue
构造函数的情况下提及容量
我们正在使用PriorityQueue
的比较器,而不是这种情况
我们使用比较器和任何类型的容量的其他集合
构造函数不是强制性的,编译时很好
在PriorityQueue
的情况下,如果我们必须使用比较器,我们必须这样做
提到容量,否则会抛出编译时错误。
class PQ {
PriorityQueue<Integer> pq2 = new PriorityQueue<Integer>(10, new PQ.PQSort());
static class PQSort implements Comparator<Integer> {
public int compare(Integer one, Integer two) {
return two.compareTo(one);
}
}
}
答案 0 :(得分:3)
您需要询问API设计人员。
我猜他们只是不想为可选参数的所有可能组合提供重载构造函数。所以你只能得到他们认为最常用的那些,以及一个有所有选项的(你必须为你不关心的那些提供默认值)。
其他语言通过使用带有默认值的可选命名参数来解决此问题。在Java中,我们坚持使用位置参数(并且API设计者选择提供他们认为合适的许多方便的覆盖)。
答案 1 :(得分:-1)
即使您删除初始容量也适用于我
优先级队列具有以下构造函数
1 PriorityQueue()
这将创建一个PriorityQueue,其默认初始容量(11)根据其自然顺序对其元素进行排序。
2 PriorityQueue(Colle enter code here
ction c)
这将创建一个PriorityQueue,其中包含指定集合中的元素。
3 PriorityQueue(int initialCapacity)
这将创建一个具有指定初始容量的PriorityQueue,该容量根据其自然顺序对其元素进行排序。
4 PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
这将创建一个具有指定初始容量的PriorityQueue,该容量根据指定的比较器对其元素进行排序。
5 PriorityQueue(PriorityQueue<? extends E> c)
这将创建一个PriorityQueue,其中包含指定优先级队列中的元素。
6 PriorityQueue(SortedSet<? extends E> c)
这将创建一个PriorityQueue,其中包含指定有序集合中的元素。
以下代码可以使用
public class PqueueEx1 {
PriorityQueue<Integer> pq2 = new PriorityQueue<Integer>(new PqueueEx1.PQSort());
static class PQSort implements Comparator<Integer> {
public int compare(Integer one, Integer two) {
return two.compareTo(one);
}
}
}