2009-09-19 27 views
4

Javaで優先度を決定するキーがオブジェクトのメンバーであるオブジェクトのPriorityQueueを作成することは可能ですか?Javaの優先キュー?

netで見られるすべての例は、PriorityQueueに整数を挿入して取り出します。私は、オブジェクトのインスタンスを挿入し、メンバ値の1つ(整数かもしれない)に基づいて取得される実装を探しています。

答えて

17

はい、PriorityQueueにはconstructorがあり、Comparatorに要素の順序を定義して渡すことができます。たとえば、次のBarクラスがある場合:

public class Bar { 
    private int priority; 

    // getters/setters ... 
} 

をそして、あなたはpriorityフィールド(例えば、キュ​​ーの前に大きな優先滞在を持つアイテム)に基づいて要素を順序付けするプライオリティキューを作成したいです、あなたは以下を使用することができます。

Queue<Bar> queue = new PriorityQueue<Bar>(new Comparator<Bar>() { 
    public int compare(Bar a1, Bar a2) { 
    return a2.getPriority() - a1.getPriority(); // adapt this to your needs 
    } 
}); 

あなたはcompare方法で、より複雑なロジックを持っている、またはあなたは、コードを再利用したい場合は、その後、私はあなたがクラスを作成示唆した場合、Comparator<Bar>を実装する、BarComparatorを言います。

また、上記の代替として、あなたはBarComparableインターフェイスを実装することができ、そしてそのように、emptyのコンストラクタを使用します。

public class Bar implements Comparable<Bar> { 
    private int priority; 

    @Override 
    public int compareTo(Bar b) { 
    return b.getPriority() - this.priority; 
    } 
} 

はそれがお役に立てば幸いです。

+0

あなたがより高い優先順位で発注していると言う場合、優先順位3を持つバーが優先順位13を持つバーよりも優先順位が高いという意味で、バーが小さい優先順位値を持つということは、 " – Tomek

+1

正反対です。優先度20の「バーa」は、優先度18の「バーb」よりも優先度が高く、「バーa」はキューの先頭にとどまる。 –

関連する問題