これは非常に基本的な質問のように思えますが、私は何時間も立ち往生しています。
メソッド enqueue/dequeue をいつ使用し、いつ offer/poll を使用するのですか?!
void enqueue(int x, int p)
メソッドとメソッドを使用して整数の PQ を作成したいのですが、int dequeue()
そのようなキューを宣言するにはどうすればよいですか?
ありがとう。
「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
enqueue
Java キューにはanddequeue
メソッドがありません。これらの操作は、次の方法を使用して行われます。
add(e)
: オブジェクトの挿入に失敗した場合、例外をスローしますoffer(e)
false
:オブジェクトの挿入に失敗した場合に戻りますremove()
: キューが空の場合は例外をスローしますpoll()
null
:キューが空の場合に戻りますelement()
: キューが空の場合は例外をスローしますpeek()
null
:キューが空の場合に戻りますそして最後に、いつ使用するoffer
かadd
?
offer
とについてadd
: まあ、それは、キューへの挿入の失敗をどのように処理したいかによって異なります。
QueueがCollectionから継承するaddメソッドは、キューの容量制限に違反しない限り要素を挿入します。違反した場合はIllegalStateExceptionをスローします。offerメソッドは、バインドされたキューでのみ使用することを目的としていますが、 falseを返すことによって要素の挿入に失敗したことを示すという点でのみaddと異なります。
(参照: http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html )
これがお役に立てば幸いです