工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java PriorityQueue

Java PriorityQueue

このチュートリアルでは、例を使って Java コレクション フレームワークの PriorityQueue クラスについて学びます。

PriorityQueue クラスは、ヒープ データ構造の機能を提供します。

Queue インターフェイスを実装します。

通常のキューとは異なり、優先キュー要素はソートされた順序で取得されます。

要素を昇順で取得したいとします。この場合、プライオリティ キューの先頭が最小要素になります。この要素が取得されると、次に小さい要素がキューの先頭になります。

プライオリティ キューの要素はソートされない場合があることに注意することが重要です。ただし、要素は常にソートされた順序で取得されます。


PriorityQueue の作成

プライオリティ キューを作成するには、java.util.PriorityQueue をインポートする必要があります。 パッケージ。パッケージをインポートしたら、Java でプライオリティ キューを作成する方法を次に示します。

PriorityQueue<Integer> numbers = new PriorityQueue<>();

ここでは、引数なしでプライオリティ キューを作成しました。この場合、プライオリティ キューの先頭はキューの最小要素です。また、要素はキューから昇順で削除されます。

ただし、 Comparator を使用して要素の順序をカスタマイズできます インターフェース。これについては、このチュートリアルの後半で学習します。


PriorityQueue のメソッド

PriorityQueue クラスは、Queue に存在するすべてのメソッドの実装を提供します


要素を PriorityQueue に挿入

たとえば、

import java.util.PriorityQueue;

class Main {
    public static void main(String[] args) {

        // Creating a priority queue
        PriorityQueue<Integer> numbers = new PriorityQueue<>();

        // Using the add() method
        numbers.add(4);
        numbers.add(2);
        System.out.println("PriorityQueue: " + numbers);

        // Using the offer() method
        numbers.offer(1);
        System.out.println("Updated PriorityQueue: " + numbers);
    }
}

出力

PriorityQueue: [2, 4]
Updated PriorityQueue: [1, 4, 2]

ここでは、numbers という名前のプライオリティ キューを作成しました。 .キューに 4 と 2 を挿入しました。

2 の前に 4 が挿入されていますが、キューの先頭は 2 です。これは、プライオリティ キューの先頭がキューの最小要素であるためです。

次に、キューに 1 を挿入しました。キューは、最小の要素 1 をキューの先頭に格納するように再配置されます。


PriorityQueue 要素へのアクセス

優先キューから要素にアクセスするには、 peek() を使用できます 方法。このメソッドは、キューの先頭を返します。たとえば、

import java.util.PriorityQueue;

class Main {
    public static void main(String[] args) {

        // Creating a priority queue
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.println("PriorityQueue: " + numbers);

        // Using the peek() method
        int number = numbers.peek();
        System.out.println("Accessed Element: " + number);
    }
}

出力

PriorityQueue: [1, 4, 2]
Accessed Element: 1

PriorityQueue 要素を削除

たとえば、

import java.util.PriorityQueue;

class Main {
    public static void main(String[] args) {

        // Creating a priority queue
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.println("PriorityQueue: " + numbers);

        // Using the remove() method
        boolean result = numbers.remove(2);
        System.out.println("Is the element 2 removed? " + result);

        // Using the poll() method
        int number = numbers.poll();
        System.out.println("Removed Element Using poll(): " + number);
    }
}

出力

PriorityQueue: [1, 4, 2]
Is the element 2 removed? true
Removed Element Using poll(): 1

PriorityQueue の繰り返し

優先キューの要素を反復するには、iterator() を使用できます 方法。この方法を使用するには、java.util.Iterator をインポートする必要があります。 パッケージ。たとえば、

import java.util.PriorityQueue;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {

        // Creating a priority queue
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.print("PriorityQueue using iterator(): ");

        //Using the iterator() method
        Iterator<Integer> iterate = numbers.iterator();
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

出力

PriorityQueue using iterator(): 1, 4, 2,

その他の PriorityQueue メソッド

メソッド 説明
contains(element) 指定された要素の優先キューを検索します。要素が見つかった場合、true を返します。 、そうでない場合は false を返します .
size() プライオリティ キューの長さを返します。
toArray() プライオリティ キューを配列に変換して返します。

PriorityQueue コンパレータ

上記のすべての例で、優先キュー要素は自然な順序 (昇順) で取得されます。ただし、この順序はカスタマイズできます。

このために、Comparator を実装する独自のコンパレータ クラスを作成する必要があります。 インターフェース。たとえば、

import java.util.PriorityQueue;
import java.util.Comparator;
class Main {
    public static void main(String[] args) {

        // Creating a priority queue
        PriorityQueue<Integer> numbers = new PriorityQueue<>(new CustomComparator());
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        numbers.add(3);
        System.out.print("PriorityQueue: " + numbers);
    }
}

class CustomComparator implements Comparator<Integer> {

    @Override
    public int compare(Integer number1, Integer number2) {
        int value =  number1.compareTo(number2);
        // elements are sorted in reverse order
        if (value > 0) {
            return -1;
        }
        else if (value < 0) {
            return 1;
        }
        else {
            return 0;
        }
    }
}

出力

PriorityQueue: [4, 3, 1, 2]

上記の例では、CustomComparator を渡すプライオリティ キューを作成しました。 引数としてのクラス。

CustomComparator クラスは Comparator を実装します

compare() を上書きします 方法。このメソッドにより、要素の先頭が最大数になります。

コンパレーターの詳細については、Java コンパレーターにアクセスしてください。


Java

  1. Java オペレーター
  2. Java コメント
  3. Java if...else ステートメント
  4. Java for-each ループ
  5. Java 文字列
  6. Java インターフェイス
  7. Java匿名クラス
  8. Java try-with-resources
  9. Java アノテーション
  10. Java アサーション
  11. Java ベクトル