2017-12-29 12 views
0

次のコードを見つけました。ここで、優先度キューのコンストラクタでコンパレータをどのように初期化しますか?別のクラスのコンストラクタ内のコンパレータの初期化

コンパイラはJavaのインタフェースであり、別のクラスで実装する必要があります。

理想的には、コンパイラをクラスに実装し、PriorityQueueコンストラクタでその初期化を使用する必要があります。

ただし、次のコードが機能します。どうやって?参照コードスナップでよく

PriorityQueue<ArrayList<Integer>> heap = new PriorityQueue<ArrayList<Integer>>(10, new Comparator<ArrayList<Integer>>(){ 
      public int compare(ArrayList<Integer> list1, ArrayList<Integer> list2) { 
       return list1.get(2) - list2.get(2); 
      } 
+5

「匿名の内部クラス」を検索 –

+0

十分な特権を持つ人は、改善のために質問を編集することができます。あなたの質問を改善するために仕事を元に戻してはいけません(そしてこのサイト全体)。 –

+2

また、コードは技術的には 'PriorityQueue'のコンストラクタの内側ではなく、コンストラクタの呼び出しの前にあります。 –

答えて

0

、プライオリティキューオブジェクトは、すなわちint型と型コンパレータの引数として2つのオブジェクトを取るコンストラクタを使用して作成されています。

参照コードスナップでは、Comparator型オブジェクトは匿名の内部クラスとして作成され、2番目のオブジェクトとしてPriorityQueueコンストラクタに渡されました。

これを理解するために、以下の2つのステートメントでそのステートメントを破ることができます。 1stはコンパレータオブジェクトを作成し、2ndはそのオブジェクトをブロッキングキューに渡します。

コンパレータ> comparator = new Comparator>(){ public int compare(ArrayList list1、ArrayList list2){ return list1.get(2) - list2.get(2); } };

PriorityQueue> heap = new PriorityQueue>(10、comparator);

関連する問題