Javaで優先度を決定するキーがオブジェクトのメンバーであるオブジェクトのPriorityQueueを作成することは可能ですか?Javaの優先キュー?
netで見られるすべての例は、PriorityQueueに整数を挿入して取り出します。私は、オブジェクトのインスタンスを挿入し、メンバ値の1つ(整数かもしれない)に基づいて取得される実装を探しています。
Javaで優先度を決定するキーがオブジェクトのメンバーであるオブジェクトのPriorityQueueを作成することは可能ですか?Javaの優先キュー?
netで見られるすべての例は、PriorityQueueに整数を挿入して取り出します。私は、オブジェクトのインスタンスを挿入し、メンバ値の1つ(整数かもしれない)に基づいて取得される実装を探しています。
はい、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
を言います。
また、上記の代替として、あなたはBar
はComparable
インターフェイスを実装することができ、そしてそのように、emptyのコンストラクタを使用します。
public class Bar implements Comparable<Bar> {
private int priority;
@Override
public int compareTo(Bar b) {
return b.getPriority() - this.priority;
}
}
はそれがお役に立てば幸いです。
あなたがより高い優先順位で発注していると言う場合、優先順位3を持つバーが優先順位13を持つバーよりも優先順位が高いという意味で、バーが小さい優先順位値を持つということは、 " – Tomek
正反対です。優先度20の「バーa」は、優先度18の「バーb」よりも優先度が高く、「バーa」はキューの先頭にとどまる。 –