次のテストを行って、
PriorityBlockingQueue<String> pq = new PriorityBlockingQueue<>(2);
pq.put("Sing");
pq.put("Sing2");
pq.put("Sing3");
pq.put("Sing4");
pq.put("Sing10");
pq.put("Sing11");
pq.put("Sing12");
pq.put("Sing13");
for (String s1: pq)
{
System.out.print(s1 +" ");
}
私が得る結果は次のとおりです。
Sing Sing10 Sing11 Sing13 Sing2 Sing3 Sing12 Sing4
構築時にコンパレーターが指定されていない場合、 APIがどのようにそれらを自然な順序で並べ替える必要があるかを説明します。ただし、ご覧のとおり、結果はまったく順序付けられていません。
次に、設定した初期容量は 2 でした。境界が実際に設定されていないのに、なぜそのようなオプションがあるのでしょうか? ポイントは何ですか?私はAPIがそれが無制限の優先度キューであることを指定していることを理解していますが、コンストラクターが初期容量を設定できないのに、なぜコンストラクターを作成するのですか?
だから基本的に私は2つの質問があります:
1)投稿された上記の結果の順序が要素の自然な順序に従わないのはなぜですか?
2)実際に境界を設定しないパラメーター「初期容量」を持つコンストラクターを持つ目的は何ですか。LinkedBlockingQueueでは境界を設定するので妥当ですが、PriorityBlockingQueue では発生しません。
前もって感謝します。