2017-10-21 16 views
1

私は基本的にPQにして並べ替え、そのオブジェクト内の特定のキーでオブジェクトをプッシュするカスタムプライオリティキューを作ってるんだ:Java優先順位キューのcompareToとのオーバーライドの仕組みを理解していますか?

優先キューエントリクラス

package Graphs; 

public class PQEntry implements Comparable<PQEntry> { 
    public int node; 
    public int nodeVal; 

    public PQEntry(int node, int nodeVal) { 
     this.node = node; 
     this.nodeVal = nodeVal; 
    } 

    @Override 
    public String toString() { 
     return "Node: " + this.node + ", Value: " + this.nodeVal; 
    } 

    public int getNodeVal() { 
     return this.nodeVal; 
    } 

    @Override 
    public int compareTo(PQEntry other) { 
     return Integer.compare(this.getNodeVal(), other.nodeVal); 
    } 
} 

今、すべてが結構なです

PriorityQueue<PQEntry> pq = new PriorityQueue(); 

しかし、私は、Javaに新しいですし、私のPQEntryクラス内のcompareToは、優先度つきキュークラスに適用されますし、どのように、これは正確に働いているとき、私はどのように/どこ/へと混乱しています:、優先順位は、それが必要として動作します。

私は関数をPriorityQueueの中で呼び出すと、私のPQEntryクラスからスーパーメソッドを呼び出すいくつかのスワッピングアルゴリズムが開始されますか?私は実際にはJavaに少し新しく、ここでプロセスの流れを理解しようとしています。

答えて

0

私はあなたのために物事を明確にしようとします。彼らの自然順序付けに従って

優先度キューの要素が発注されている、またはキューの構築時に提供されるComparatorにより、コンストラクタが使用されているかに依存:documentation of PriorityQueueあなたがそれに気づくでしょうに

は述べて。優先度キューはnull要素を許可しません。また、自然順序付けに依存する優先度キューは、類似しないオブジェクトの挿入を許可しません(ClassCastExceptionが発生する可能性があります)。

PriorityQueueComparatorまたはComparableのいずれかのオブジェクトを期待しています。これらのうちの1つが提供されている限り、キューは単にそれらのインタフェースに依存しているため、キューは「必要に応じて動作します」。

コンパレータが指定されていない場合、は、要素をComparableとしてキャストし、次にcompareToメソッドを使用して並べ替える方法を決定します。

コンパレータが提供されると、PriorityQueueは、単純にそのオブジェクトを使用して要素の比較を実行し、それに応じて並べ替えます。

詳細については、Java Tutorials、特にlesson on Interfaces and Inheritanceをご覧ください。

関連する問題