4

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

ネットで見たすべての例は、整数を PriorityQueue に挿入して取得します。オブジェクトのインスタンスを挿入し、整数である可能性があるそのメンバー値の 1 つに基づいて取得される実装を探しています。

4

1 に答える 1

17

はい、要素の順序を定義するために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;
  }
}

それが役に立てば幸い。

于 2009-09-19T22:31:04.653 に答える