Gibt es einen Haufen in Java?


Antworten:


29

Min Haufen:

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

Max Haufen:

PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return - Integer.compare(o1, o2);
    }
});

24

Aktualisieren einer vorhandenen Antwort für Java 8 :

Sie können die Java Priority Queue als Heap verwenden.

Min Heap: -> um das min-Element immer oben zu halten, damit Sie in O (1) darauf zugreifen können.

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

Max Heap: -> damit das max-Element immer oben bleibt, in der gleichen Reihenfolge wie oben.

PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.reverseOrder());

Welches ist das gleiche wie (Integer o1, Integer o2) -> (- Integer.compare(o1,o2))aus anderen Antworten vorgeschlagen.

Und Sie können Folgendes verwenden:
add->, um der Warteschlange ein Element hinzuzufügen. O (log n)
remove-> um die min / max zu erhalten und zu entfernen. O (log n)
peek-> um die min / max zu erhalten, aber nicht zu entfernen. O (1)


10

In Java kann PriorityQueue als Heap verwendet werden.

Min Heap

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

Max Heap:

PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.reverseOrder());


3

Nein, als solches gibt es keine, aber Sie können die Prioritätswarteschlange als Heap verwenden. Es wurde von Oracle offiziell angewiesen, Priority Queue als Heap zu verwenden. Weitere Informationen finden Sie unter diesem Link .

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

PriorityQueue<Integer> MaxHeap = new PriorityQueue<>(Comparator.reverseOrder());

0

Sie können auch TreeSet in Betracht ziehen , das die Protokollzeit (n) für grundlegende Vorgänge (Hinzufügen, Entfernen, Enthalten) garantiert.


1
TreeSet bietet andere Eigenschaften als ein Heap. Die Prioritätswarteschlange ist die Heap-Struktur in java.util. *
ahains

2
Tatsächlich verwendet TreeSet intern eine TreeMap, bei der es sich um eine Rot-Schwarz-Baum-Implementierung handelt, die sich von einem Heap unterscheidet.
Alfredo Osorio
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.