1

これは非常に基本的な質問のように思えますが、私は何時間も立ち往生しています。

メソッド enqueue/dequeue をいつ使用し、いつ offer/poll を使用するのですか?!

void enqueue(int x, int p)メソッドとメソッドを使用して整数の PQ を作成したいのですが、int dequeue()そのようなキューを宣言するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

7

「PQ」は「優先キュー」を意味すると仮定しています。私はそのようなキューを使用したことがありません (キューに対する私のイメージは、厳密に FIFO 構造のものです) が、ドキュメントを読んだ後、これを行うことができると思います:

まず、キューに格納するオブジェクトのクラスを作成する必要があります。int内容とint優先度の仮定:

public class MyClass implements Comparable<MyClass> {
    private int x, p;

    /*
     * x: Contents
     * p: Priority
     */
    public MyClass(int x, int p) {
        this.x = x;
        this.p = p;
    }

    @override
    public int compareTo(MyClass o) {
        return this.p - o.p;
    }

    public int getX() {
        return x;
    }
}

次に、プライオリティ キューを作成します。クラスのドキュメントを正しく理解していれば、compareTo メソッドを使用してオブジェクトを並べ替えます。

....
PriorityQueue<MyClass> pq = new PriorityQueue<MyClass>();
....
pq.add(new MyClass(x, p));
....

チェック: http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html

enqueueJava キューにはanddequeueメソッドがありません。これらの操作は、次の方法を使用して行われます。

  • エンキュー:
    • add(e): オブジェクトの挿入に失敗した場合、例外をスローします
    • offer(e)false:オブジェクトの挿入に失敗した場合に戻ります
  • デキュー:
    • remove(): キューが空の場合は例外をスローします
    • poll()null:キューが空の場合に戻ります
  • キューの最初のオブジェクトを見てください。
    • element(): キューが空の場合は例外をスローします
    • peek()null:キューが空の場合に戻ります

そして最後に、いつ使用するofferadd?

offerとについてadd: まあ、それは、キューへの挿入の失敗をどのように処理したいかによって異なります。

QueueがCollectionから継承するaddメソッドは、キューの容量制限に違反しない限り要素を挿入します。違反した場合はIllegalStateExceptionをスローします。offerメソッドは、バインドされたキューでのみ使用することを目的としていますが、 falseを返すことによって要素の挿入に失敗したことを示すという点でのみaddと異なります。

(参照: http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html )

これがお役に立てば幸いです

于 2012-11-03T16:09:23.887 に答える