2016-12-23 8 views
-1

次のコードを使用して優先度キューをインスタンス化します。 official docは、pqが初期引数とコンパレータの2つの引数を取るため、コンパイラをパスするとは思わなかった。しかし、コードはコンパイルされており、実行時エラーは発生しませんでした。説明は?Java優先順位キュー - 初期容量はありませんが、コンパイラは渡されますか?

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; 
    } 
}); 
+3

を使用していることですjava/util/PriorityQueue.html。一致するコンストラクタがあります。 – Sirko

+0

Java 7のドキュメントを見ています。Java 8を使用していると思われます。 –

答えて

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

EDIT:

をこのコンストラクタは、それはあなたが提供されたリンクで言及されていない理由である、Javaの8で追加されました。 Java 8 version includes the new constructor

0

コンパレータが1つのコンストラクタは、Java 8で定義されています(Java 7では定義されていません)。 https://docs.oracle.com/javase/8/docs/api/:

だから説明は、あなたがJava8のJavadocを参照してくださいするJava 7 APIを見ているが、Java 8

関連する問題