Wie bekomme ich eine PriorityQueue
nach dem zu sortieren, was ich möchte?
Gibt es außerdem einen Unterschied zwischen dem offer
y add
Methoden?
Wie bekomme ich eine PriorityQueue
nach dem zu sortieren, was ich möchte?
Gibt es außerdem einen Unterschied zwischen dem offer
y add
Methoden?
Hier ist ein einfaches Beispiel, das Sie zum Lernen verwenden können:
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Random;
public class PQExample {
public static void main(String[] args) {
//PriorityQueue with Comparator
Queue<Customer> cpq = new PriorityQueue<>(7, idComp);
addToQueue(cpq);
pollFromQueue(cpq);
}
public static Comparator<Customer> idComp = new Comparator<Customer>(){
@Override
public int compare(Customer o1, Customer o2) {
return (int) (o1.getId() - o2.getId());
}
};
//utility method to add random data to Queue
private static void addToQueue(Queue<Customer> cq){
Random rand = new Random();
for(int i=0;i<7;i++){
int id = rand.nextInt(100);
cq.add(new Customer(id, "KV"+id));
}
}
private static void pollFromQueue(Queue<Customer> cq){
while(true){
Customer c = cq.poll();
if(c == null) break;
System.out.println("Customer Polled : "+c.getId() + " "+ c.getName());
}
}
}
In der Prioritäts-Warteschlange wird jedem Element eine bestimmte Priorität zugewiesen, wobei das Element mit der höchsten Priorität am Anfang der Warteschlange erscheint. Nun hängt es von Ihnen ab, wie Sie den einzelnen Elementen Priorität zuweisen möchten. Wenn Sie das nicht tun, wird Java dies auf die Standardmethode umstellen. Das Element mit dem geringsten Wert erhält die höchste Priorität und wird daher zuerst aus der Warteschlange entfernt. Wenn es mehrere Elemente mit der gleichen höchsten Priorität gibt, wird der Gleichstand willkürlich aufgelöst. Sie können auch eine Reihenfolge festlegen, indem Sie Comparator im Konstruktor PriorityQueue(initialCapacity, comparator)
Beispiel-Code:
PriorityQueue<String> queue1 = new PriorityQueue<>();
queue1.offer("Oklahoma");
queue1.offer("Indiana");
queue1.offer("Georgia");
queue1.offer("Texas");
System.out.println("Priority queue using Comparable:");
while (queue1.size() > 0) {
System.out.print(queue1.remove() + " ");
}
PriorityQueue<String> queue2 = new PriorityQueue(4, Collections.reverseOrder());
queue2.offer("Oklahoma");
queue2.offer("Indiana");
queue2.offer("Georgia");
queue2.offer("Texas");
System.out.println("\nPriority queue using Comparator:");
while (queue2.size() > 0) {
System.out.print(queue2.remove() + " ");
}
Sortie :
Priority queue using Comparable:
Georgia Indiana Oklahoma Texas
Priority queue using Comparator:
Texas Oklahoma Indiana Georgia
Andernfalls können Sie auch einen benutzerdefinierten Komparator definieren:
import java.util.Comparator;
public class StringLengthComparator implements Comparator<String>
{
@Override
public int compare(String x, String y)
{
//Your Own Logic
}
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.