package javacodebook.collections.priorityqueue; import java.util.*; /** * Eine Prioritätswarteschlange als Erweiterung der einfachen Warteschlange. */ public class PriorityQueue extends javacodebook.collections.queue.Queue { /** Erzeugt eine neue Prioritätswarteschlange mit variabler Größe */ public PriorityQueue() { super(); } /** Fügt ein Objekt ein, dass sich selbst mit den bereits vorhandenen * Objekten vergleichen kann. Hierbei wird eine Verschärfung der Methode in * der Oberklasse Queue vorgenommen, das eingefügte Objekt muss das * Interface java.lang.Comparable implementieren. **/ public void insert(Comparable obj) { insert(obj, null); } /** Fügt ein Objekt ein, dass sich nicht selbst mit den bereits vorhandenen * Objekten vergleichen kann. Statt dessen wird ein Vergleichs-Operator in * Form eines Comparator-Objekts erwartet, das den Vergleich durchführt. **/ public void insert(Object obj, Comparator comp) { int index = Collections.binarySearch(super.queue, obj); if(index < 0) super.queue.add(-index -1, obj); else super.queue.addLast(obj); } } --- Neue Klasse --- package javacodebook.collections.priorityqueue; public class PriorityQueueExample { public static void main(String[] args) { PriorityQueue queue = new PriorityQueue(); queue.insert("Eins"); queue.insert("Zwei"); queue.insert("Drei"); System.out.println(queue.remove());//Erst wird Drei ausgegeben System.out.println(queue.remove());//Dann Eins System.out.println(queue.remove());//Dann Zwei } }