優先度を決定するキーがオブジェクトのメンバーであるオブジェクトの PriorityQueue を Java で作成することは可能ですか?
ネットで見たすべての例は、整数を PriorityQueue に挿入して取得します。オブジェクトのインスタンスを挿入し、整数である可能性があるそのメンバー値の 1 つに基づいて取得される実装を探しています。
優先度を決定するキーがオブジェクトのメンバーであるオブジェクトの PriorityQueue を Java で作成することは可能ですか?
ネットで見たすべての例は、整数を PriorityQueue に挿入して取得します。オブジェクトのインスタンスを挿入し、整数である可能性があるそのメンバー値の 1 つに基づいて取得される実装を探しています。
はい、要素の順序を定義するためにa を渡すことができるPriorityQueue
コンストラクターがあります。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
場合、またはコードを再利用したい場合はBarComparator
、 を実装するクラス、たとえば を作成することをお勧めしますComparator<Bar>
。
また、上記の代わりに、次のようにインターフェイスをBar
実装し、空のコンストラクターComparable
を使用することもできます。
public class Bar implements Comparable<Bar> {
private int priority;
@Override
public int compareTo(Bar b) {
return b.getPriority() - this.priority;
}
}
それが役に立てば幸い。