Priority Queue / Comparator

Ape50

Mitglied
Hey Leute,

ich brauch mal wieder eure Hilfe....
Hab ein paar Verständnisprobleme zur PQ.

Ist es richtig, dass eine "normale" PQ immer compareto(Obj) benutzt?
Wann wird compare(obj,obj) benutzt?
Wie übergebe ich im Konstructor einen speziellen Comparator bzw die methode, die benutzt werden soll?

Danke schonmal 🙂
 
Ja standardmäßig, wenn du keinen Comparator angibst, werden die Elemente nach ihrer natürlichen Ordnung angeordnet. Das wird über das Comparable Interface (compareTo() Methode) geregelt.

Einen Comparator kannst du über den Konstruktor mitgeben. "Wie" man das macht ist immer so eine Sache. Wenn deine Methode zB ein int zurück gibt kannst du es bspw so machen
Java:
new PriorityQueue<>(11, Comparator.comparingInt(YourClass::yourIntMethod));
 
hi, danke schonmal.
das problem ist -glaube ich- dass ich meiner vergleichsmethode wirklich 2 argumente übergen muss. dein code (yourintmethod) scheint nur für ein argument vorgesehen zu sein. gibts irgendwo eine übersicht, was es außer comparingInt noch so gibt? und was das ding genau macht?
 
Du kannst dir natürlich auch deinen eigenen Comparator schreiben. Das oben war nur ein Beispiel für einer der vielen Hilfsmethoden die es im Comparator gibt.
Java:
new PriorityQueue<>(11, (a, b) -> yourCompareMethod(a, b));
a und b sind hier jeweils 2 Instanzen deiner Klasse

Generell solltest du dich vielleicht einfach im Netz mal zu Comparator einlesen. Dann wird das Recht schnell klar.
 
oh ja so gehts... danke
joa hab ich, problem war einfach nur die übergabe...

noch ne kleine andere frage:
was ist, wenn meine pq das maximum an elementen erreicht hat und ich noch eins hinzufüge? wird das dann erweitert, kommt eine fehlermeldung oder was passiert dann?
ich weiß nicht, wie groß die dinger werden, gibts das was ähnliches besseres in dem fall?
 
Was für ein Maximum? Den Integerwert, den du dem Konstruktor übergibst, ist nur die initiale Kapazität. Die Queue wird erweitert wenn du mehr Elemente hinzufügst
 

Zurück
Oben