English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java Grundlegende Anleitung

Java Flusskontrolle

Java Array

Java objektorientiert(I)

Java objektorientiert(II)

Java objektorientiert(III)

Java Ausnahmenbehandlung

Java Liste(List)

Java Queue(Queue)

Java Map-Sammlung

Java Set-Sammlung

Java Ein- und Ausgabe(I/)

Java Reader/Writer

Andere Themen von Java

Java PriorityQueue

In diesem Tutorial werden wir anhand von Beispielen die PriorityQueue-Klasse der Java Collection-Frameworks lernen.

Die PriorityQueue-Klasse bietet die Funktionen des Heap-Datenstruktur.

Es implementiertQueue-Schnittstelle

Im Gegensatz zur normalen Queue werden die Elemente der Prioritätsqueue in der sortierten Reihenfolge abgerufen.

Angenommen, wir möchten die Elemente in aufsteigender Reihenfolge abrufen. In diesem Fall ist der Kopf der Prioritätsqueue das kleinste Element. Nachdem dieses Element abgerufen wurde, wird das nächste kleinste Element der Kopf der Queue.

Zu beachten ist, dass die Elemente der Prioritätsqueue möglicherweise nicht sortiert sind. Allerdings werden die Elemente immer in der sortierten Reihenfolge abgerufen.

Erstellen Sie eine PriorityQueue

Um eine Prioritätsquelle zu erstellen, müssen wir das Paket java.util.PriorityQueue importieren. Nachdem das Paket importiert wurde, können wir die folgenden Methoden verwenden, um eine Prioritätsquelle in Java zu erstellen.

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

Hier erstellen wir eine Prioritätsquelle ohne Parameter. In diesem Fall ist der Kopf der Prioritätsquelle das kleinste Element in der Reihe. Elemente werden in aufsteigender Reihenfolge aus der Reihe entfernt.

Wir können jedoch mithilfe des Comparator-Interfaces die Reihenfolge der Elemente anpassen. Dies werden wir im späteren Teil des Tutorials erläutern.

PriorityQueue-Methode

Die Klasse PriorityQueue bietet alle Methoden, die im Queue-Interface vorhanden sind, als Implementierung.

Fügen Sie Elemente in die PriorityQueue ein

  • add() - Fügen Sie das angegebene Element in die Reihe ein. Wenn die Reihe voll ist, wird eine Ausnahme ausgelöst.

  • offer() - Fügen Sie das angegebene Element in die Reihe ein. Wenn die Reihe voll ist, wird false zurückgegeben.

Beispielsweise,

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        //Erstellen Sie eine Prioritätsquelle
        PriorityQueue<Integer> zahlen = new PriorityQueue<>();
        //Verwenden Sie die add()-Methode
        zahlen.add(4);
        zahlen.add(2);
        System.out.println("PriorityQueue: ") + numbers);}}
        //Verwenden Sie die offer()-Methode
        numbers.offer(1);
        System.out.println("Aktualisierte PriorityQueue: ") + numbers);}}
    }
}

Ausgaberesultat

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

Hier erstellen wir eine Prioritätsquelle namens numbers. Wir haben4und2in die Reihe eingefügt werden.

obwohl4hineingefügt wurde2vorher, aber der Kopf der Reihe ist2. Dies liegt daran, dass der Kopf der Prioritätsquelle das kleinste Element in der Reihe ist.

Dann werden wir1Die Reihe neu anordnen, um den kleinsten Element1Am Anfang der Reihe speichern.

Anzeigen von PriorityQueue-Elementen

Um Elemente aus der Prioritätsquelle zu erreichen, können wir die peek()-Methode verwenden. Diese Methode gibt den Kopf der Reihe zurück. Zum Beispiel,

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        // Erstellen Sie eine Prioritätsliste
        PriorityQueue<Integer> zahlen = new PriorityQueue<>();
        zahlen.add(4);
        zahlen.add(2);
        zahlen.add(1);
        System.out.println("PriorityQueue: ") + numbers);}}
        //Verwenden Sie die peek()-Methode
        int number = numbers.peek();
        System.out.println("Anzeigen von Elementen: ") + number);
    }
}

Ausgaberesultat

PriorityQueue: [1, 4, 2]
Elemente anzeigen: 1

Löschen von PriorityQueue-Elementen

  • remove() - Löschen eines bestimmten Elements aus der Reihe

  • poll() - Rückgabe und Löschen des Kopfes der Reihe

Beispielsweise,

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        // Erstellen Sie eine Prioritätsquelle
        PriorityQueue<Integer> zahlen = new PriorityQueue<>();
        zahlen.add(4);
        zahlen.add(2);
        zahlen.add(1);
        System.out.println("PriorityQueue: ") + numbers);}}
        //Verwenden Sie die remove()-Methode
        boolean result = numbers.remove(2);
        System.out.println("Element")2Bereits gelöscht? \ + result);
        //Verwenden Sie die poll()-Methode
        int number = numbers.poll();
        System.out.println("Verwenden Sie poll() gelöschte Elemente: ") + number);
    }
}

Ausgaberesultat

PriorityQueue: [1, 4, 2]
Element2Bereits gelöscht? true
Das durch poll() gelöschte Element: 1

Durchlauf der PriorityQueue

Um die Elemente der Prioritätsliste zu durchlaufen, können wir das iterator()-Method verwenden. Um diese Methode zu verwenden, müssen wir das Paket java.util.Iterator importieren. Zum Beispiel

import java.util.PriorityQueue;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        //Erstellen Sie eine Prioritätsliste
        PriorityQueue<Integer> zahlen = new PriorityQueue<>();
        zahlen.add(4);
        zahlen.add(2);
        zahlen.add(1);
        System.out.print("Verwenden Sie iterator() zur Durchlauf von PriorityQueue: ");
        //Verwenden Sie das iterator()-Method
        Iterator<Integer> iterate = zahlen.iterator();
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Ausgaberesultat

Verwenden Sie iterator() zur Durchlauf von PriorityQueue: 1, 4, 2,

Andere Methoden der PriorityQueue

MethodeInhaltsbeschreibung
contains(element)Suchen Sie das angegebene Element in der Prioritätsliste. Wenn das Element gefunden wird, wird true zurückgegeben, andernfalls false.
size()Geben Sie die Länge der Prioritätsliste zurück.
toArray()Konvertieren Sie die Prioritätsliste in ein Array und geben Sie es zurück.

Prioritätsliste Comparator (comparator)

In allen obigen Beispielen werden die Elemente der Prioritätsliste nach natürlicher Ordnung (aufsteigend) abgerufen. Aber wir können diese Ordnung selbst festlegen.

Daher müssen wir unsere eigene Comparator-Klasse erstellen, die das Comparator-Interface implementiert. Zum Beispiel

import java.util.PriorityQueue;
import java.util.Comparator;
class Main {
    public static void main(String[] args) {
        //Erstellen Sie eine Prioritätsliste
        PriorityQueue<Integer> zahlen = new PriorityQueue<>(new CustomComparator());
        zahlen.add(4);
        zahlen.add(2);
        zahlen.add(1);
        zahlen.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);
        //Die Elemente werden in umgekehrter Reihenfolge sortiert
        if (value > 0) {
            return -1;
        }
        else if (value < 0) {
            return 1;
        }
        else {
            return 0;
        }
    }
}

Ausgaberesultat

PriorityQueue: [4, 3, 1, 2]

Im obigen Beispiel haben wir eine Prioritäts-Warteschlange erstellt und die Klasse CustomComparator als Parameter übergeben.

Die Klasse CustomComparator implementiert die Comparator-Schnittstelle.

Dann überschreiben wir die compare() Methode. Diese Methode macht jetzt den Kopf des Elements zur größten Zahl.