收集Java中的细微差别

时间:2014-04-27 10:15:12

标签: java

为什么我们必须在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);
        }
    }
}

2 个答案:

答案 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);
        }
    }

}