-1

最近、Java でプライオリティ キューの使用を開始しましたが、理解できないものをすでに見つけています。コンパレーター クラスを使用して、優先度キューを自分の方法で並べ替えました。

ここに私がした簡単なプログラムがあります:-

package main;

import java.util.Comparator;
import java.util.PriorityQueue;

class PQ implements Comparator<Integer> {

  public int compare(Integer o1, Integer o2) { // sort in the descending order
    return o2 - o1;

  }
}

public class Main {

  public static void main(String[] args) {
    int[] list = { 1, 5, 6, 9, 10, 3, 5, 2, 13, 15, 17, 19, 25, 1, 0 };
    PQ pqs = new PQ();

    PriorityQueue<Integer> pq1 = new PriorityQueue<Integer>(10, pqs);
    // what does this "10" parameter does?

    for (int x : list) {
      pq1.offer(x); // put values in to the queue
    }

    for (int x : list) {
      System.out.println(pq1.poll()); // pops out from the queue.
    }
  }
}

私の問題は、整数パラメーター「10」がプライオリティ キュー コンストラクターで何を意味するかということです (それを渡していますが、それが何をするのかわかりません)。

インターネットで検索したところ、初期容量を指定するために使用されていることがわかりましたが、まだ明確に理解できていません。

誰がそれが何をするのか説明できますか?

お時間をいただきありがとうございます。

4

2 に答える 2

0

APriorityQueueは によって支えられていObject[]ます。デフォルトでは、この配列のサイズは ですが、保持できる以上の要素を追加するたびに11、サイズを変更する必要があります (操作)。O(n)おそらくそのようなサイズ変更操作を避けるために、 int コンストラクター引数を介してこの配列の初期サイズを指定しています。

147       public PriorityQueue(int initialCapacity,
148                            Comparator<? super E> comparator) {
149           // Note: This restriction of at least one is not actually needed,
150           // but continues for 1.5 compatibility
151           if (initialCapacity < 1)
152               throw new IllegalArgumentException();
153           this.queue = new Object[initialCapacity];  // <--
154           this.comparator = comparator;
155       }

ソース

于 2013-07-11T13:32:57.733 に答える