Java优先级队列 - 没有初始容量,但是通过了编译器?

时间:2016-12-23 08:39:35

标签: java priority-queue

使用以下代码实例化优先级队列。   没有预料到它会通过编译器,因为official doc表示pq需要2个参数:初始容量和比较器。但代码编译并没有运行时错误。任何解释?

PriorityQueue(int initialCapacity, Comparator<? super E> comparator)

 PriorityQueue<ListNode> pq = new PriorityQueue<>(
     new Comparator<ListNode>(){
        public int compare(ListNode n1, ListNode n2) { 
        return n1.val - n2.val; 
     }
 }); 

2 个答案:

答案 0 :(得分:3)

有多个构造函数。

您使用的只需要Comparator个实例:

/**
 * Creates a {@code PriorityQueue} with the default initial capacity and
 * whose elements are ordered according to the specified comparator.
 *
 * @param  comparator the comparator that will be used to order this
 *         priority queue.  If {@code null}, the {@linkplain Comparable
 *         natural ordering} of the elements will be used.
 * @since 1.8
 */
public PriorityQueue(Comparator<? super E> comparator) {
    this(DEFAULT_INITIAL_CAPACITY, comparator);
}

编辑:

此构造函数是在Java 8中添加的,这就是为什么在您提供的链接中没有提到它。 Java 8 version includes the new constructor

答案 1 :(得分:0)

具有单个比较器的构造函数在Java 8中定义(但未在Java 7中定义)。

因此,解释是您正在查看Java 7 API但使用Java 8。