Java の PriorityQueue

Farkhanda Athar 2023年10月12日
  1. Java での PriorityQueue の宣言
  2. PriorityQueue への要素の追加
  3. PriorityQueue からの要素の削除
  4. PriorityQueue 要素へのアクセス
  5. PriorityQueue の反復
Java の PriorityQueue

PriorityQueue は、オブジェクトが優先度に基づいて続行する必要がある場合に使用されます。これも先入れ先出しアルゴリズムに基づいていますが、優先度に基づいて要素を進める必要がある場合があります。そのため、PriorityQueue が登場します。PriorityQueue は優先度ヒープに基づいています。PriorityQueue の要素は自然順序に従って配置され、queue の構築時に、どのコンストラクターが使用されたかによって異なります。

Java での PriorityQueue の宣言

public class PriorityQueue<E> extends AbstractQueue<E> implements Serializable

ここで、E はこのキューに保持されている要素のタイプです。

PriorityQueue クラスでさまざまな操作を実行する方法について説明しましょう。

PriorityQueue への要素の追加

アイテムを PriorityQueue に含めるには、add() メソッドまたは addition() メソッドを使用できます。挿入の順序は PriorityQueue 内に保存されません。これらの要素は、デフォルトで昇順の優先順位に従って保存されます。

例:

import java.io.*;
import java.util.*;

public class PriorityQueueDemo {
  public static void main(String args[]) {
    PriorityQueue<String> pq = new PriorityQueue<>();

    pq.add("Welcome");
    pq.add("To");
    pq.add("Party");
    System.out.println(pq);
  }
}

出力:

[To, Welcome, Party]

PriorityQueue からの要素の削除

PriorityQueue から要素を削除するには、delete() メソッドを使用できます。そのようなオブジェクトが複数ある場合、オブジェクトの最初のインスタンスが削除されます。さらに、poll() メソッドを使用してヘッドを取得し、それを交換することもできます。

import java.io.*;
import java.util.*;
public class PriorityQueueDemo {
  public static void main(String args[]) {
    PriorityQueue<String> pq = new PriorityQueue<>();
    pq.add("Welcome");
    pq.add("To");
    pq.add("Party");

    System.out.println("Initial PriorityQueue " + pq);
    pq.remove("Geeks");
    System.out.println("After Remove - " + pq);
    System.out.println("Poll Method - " + pq.poll());
    System.out.println("Final PriorityQueue - " + pq);
  }
}

出力:

Initial PriorityQueue [To, Welcome, Party]
After Remove - [To, Welcome]
Poll Method - To
Final PriorityQueue - [Party]

PriorityQueue 要素へのアクセス

キューは先入れ先出しの原則に基づいているため、キューの先頭にのみアクセスできます。優先度の高い Queue 要素にアクセスするには、peek() メソッドを使用できます。

例:

// Java program to access elements
// from a PriorityQueue
import java.util.*;

class PriorityQueueDemo {
  // Main Method
  public static void main(String[] args) {
    // Creating a priority queue
    PriorityQueue<String> pq = new PriorityQueue<>();
    pq.add("Welcome");
    pq.add("To");
    pq.add("Party");
    System.out.println("PriorityQueue: " + pq);

    // Using the peek() method
    String element = pq.peek();
    System.out.println("Accessed Element: " + element);
  }
}

出力:

PriorityQueue: [To, Welcome, Party]
Accessed Element: To

PriorityQueue の反復

PriorityQueue を反復処理する方法はたくさんあります。最もよく知られている方法は、キューを配列に変換し、for ループを使用してそれをトラバースすることです。さらに、キューには、キューを循環するために使用できる内部イテレータが付属しています。

例:

import java.util.*;
public class PriorityQueueDemo {
  public static void main(String args[]) {
    PriorityQueue<String> pq = new PriorityQueue<>();

    pq.add("Welcome");
    pq.add("To");
    pq.add("Party");

    Iterator iterator = pq.iterator();

    while (iterator.hasNext()) {
      System.out.print(iterator.next() + " ");
    }
  }
}

出力:

To Welcome Party

関連記事 - Java Queue