interface PriorityQueue {
/* Prüft, ob die PriorityQueue leer ist. */
public boolean isEmpty();
/* Fügt ein Element, welches mit den anderen Elementen
bzgl. der Priorität verglichen werden kann, in die Queue ein. */
public void insert(Comparable element);
/* Löscht das Element mit höchster bzw. niedrigster Priorität heraus
und gibt es zurück. */
public Comparable remove();
}
import java.util.LinkedList;
public class LinkedListPriorityQueue implements PriorityQueue {
private LinkedList buffer;
public LinkedListPriorityQueue() {
this.buffer = new LinkedList();
}
public boolean isEmpty() {
return (this.buffer.size() <= 0);
}
public void insert(Comparable element) {
if (this.isEmpty()) this.buffer.addFirst(element);
else {
for (int i = 0; i < this.buffer.size(); i++) {
Comparable listElement = (Comparable)this.buffer.get(i);
if (element.compareTo(listElement) >= 0) {
this.buffer.add(i, element);
break;
}
}
}
}
public Comparable remove() {
return (Comparable)this.buffer.removeFirst();
}
}
ArrayHeap,
welche unter
Heap
implementiert ist.
Die Funktionalität der PriorityQueue steckt bereits im
ArrayHeap,
deshalb handelt es sich in der folgenden Klasse um einen Wrapper,
der alle Methoden an entsprechende Methoden des Heaps weiterleitet.
public class HeapPriorityQueue implements PriorityQueue {
private Heap buffer;
public HeapPriorityQueue() {
this.buffer = new ArrayHeap();
}
public boolean isEmpty() {
return this.buffer.isEmpty();
}
public void insert(Comparable element) {
this.buffer.insert(element);
}
public Comparable remove() {
return this.buffer.remove();
}
}
java.util.PriorityQueue<E>
public class TestPriorityQueue {
public static void main(String[] args) {
PriorityQueue prioQueue = new LinkedListPriorityQueue();
prioQueue.insert("Asterix");
prioQueue.insert("Obelix");
prioQueue.insert("Idefix");
prioQueue.insert("Miraculix");
prioQueue.insert("Majestix");
prioQueue.insert("Gutemine");
prioQueue.insert("Troubadix");
prioQueue.insert("Automatix");
prioQueue.insert("Verleihnix");
while (!prioQueue.isEmpty()) System.out.println(prioQueue.remove());
}
}
/* Ausgabe> java TestPriorityQueue
Verleihnix
Troubadix
Obelix
Miraculix
Majestix
Idefix
Gutemine
Automatix
Asterix
*/