insertWithPriorityができないのに、なぜPriorityQueue
と名付けたのですか?ヒープに非常に似ているようです。違いはありますか?違いがない場合、なぜヒープではなくPriorityQueue
と命名されたのですか?
Add()はinsertWithPriorityのように機能します。
コンストラクターを使用して、必要なタイプの優先順位を定義できます。
PriorityQueue(int, Java.util.Comparator)
http://download.Oracle.com/javase/1,5.0/docs/api/Java/util/PriorityQueue.html を見てください
コンパレータが与える順序は、キュー内の優先順位を表します。
デフォルトのPriorityQueueはMin-Heapで実装されます。つまり、最上位の要素はヒープ内の最小要素です。
最大ヒープを実装するには、独自のコンパレータを作成できます。
import Java.util.Comparator;
public class MyComparator implements Comparator<Integer>
{
public int compare( Integer x, Integer y )
{
return y - x;
}
}
そのため、次の方法で最小ヒープと最大ヒープを作成できます。
PriorityQueue minHeap=new PriorityQueue();
PriorityQueue maxHeap=new PriorityQueue(size, new MyComparator());
Max-heapには次を使用できます。
PriorityQueue<Integer> queue = new PriorityQueue<>(10, Collections.reverseOrder());
優先度ヒープに基づく無制限の優先度キュー。優先度キューの要素は、使用されるコンストラクタに応じて、自然な順序に従って、またはキュー構築時に提供される
Comparator
に従って順序付けられます。
優先度は、キュー内のオブジェクトに固有のプロパティであることを意味します。要素は、ある種の比較に基づいて順序付けられます。特定の優先度を持つオブジェクトを挿入するには、オブジェクトのフィールドが順序に影響するものを設定するだけで、 add()
itです。
そして、 @ Daniel とコメントしたように、
通常、Javaオブジェクトは、実装方法に基づく名前ではなく、提供する機能に基づいて名前が付けられます。
Javaドキュメント から
balanced binary heapとして表される優先度キュー:queue [n]の2つの子はqueue [2 * n + 1]およびqueue [2 *( n + 1)]。優先度キューは、comparator、または要素の自然順序。
PriorityQueue
-
class HeapDemo {
private final static int HEAP_SIZE = 10; //size of heap
//INNER CLASS
static class maxHeapComparator implements Comparator<Integer> {
@Override
public int compare (Integer x, Integer y) {
return y-x; //reverse order
}
}
public static void main(String[] args) {
PriorityQueue<Integer> minHeap = new PriorityQueue<>(HeapDemo.HEAP_SIZE);
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(HeapDemo.HEAP_SIZE, new maxHeapComparator());
for(int i=1; i<=HeapDemo.HEAP_SIZE; ++i){
int data = new Random().nextInt(100) +1; //number between 0 to 100
minHeap.add(data);
maxHeap.add(data);
}
System.out.print("\nMIN Heap : ");
Iterator<Integer> iter = minHeap.iterator();
while(iter.hasNext()){
System.out.print(iter.next() + " ");
}
System.out.print("\nMAX Heap : ");
iter = maxHeap.iterator();
while(iter.hasNext()) {
System.out.print(iter.next() + " ");
}
}
}
サンプルo/p:
MIN Heap : 20 32 37 41 53 91 41 98 47 86
MAX Heap : 98 91 41 53 86 20 37 41 32 47
から http://docs.Oracle.com/javase/7/docs/api/Java/util/PriorityQueue.html
優先度ヒープに基づく無制限の優先度キュー。優先度キューの要素は、自然順序付け、またはComparatorキュー構築時に提供
整数、long、float、double、character、boolean(つまりプリミティブデータ型)の場合、自然順序付けは昇順であるため、Arrays.sort(arr ){ここで、arrはプリミティブデータ型の配列です} arrの値を昇順で並べ替えます。 Comparatorを使用して、自然順序を変更できます。
コンパレータは、次の2つの方法で使用できます。
_Arrays.sort(arr, new Comparator<Integer>() {
public int compare(Integer x, Integer y) {
return y - x;
}
});
_
Arrays.sort(arr, (Integer x, Integer y) -> y - x);
これは、配列arrを降順に並べ替えます