{"id":138,"date":"2009-11-07T16:48:39","date_gmt":"2009-11-07T14:48:39","guid":{"rendered":"http:\/\/wenzlaff.de\/cgi-bin\/weblog_basic\/index.php?p=138"},"modified":"2021-11-22T17:17:03","modified_gmt":"2021-11-22T16:17:03","slug":"priorityqueue-prioritatswarteschlange","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=138","title":{"rendered":"PriorityQueue (Priorit\u00e4tswarteschlange)"},"content":{"rendered":"<p>Ab Java 1.5 gibt es die <code>PriorityQueue<\/code> im java.util Package und ist somit ein Teil des <em>Java Collections Frameworks<\/em>. Diese erweiterte Form einer Warteschlange ist ua. f\u00fcr diskreter Ereignissimulationen n\u00fctzlich. Diese Klasse ist <strong>nicht<\/strong> synchronized.<!--more--><br \/>\nDie PriorityQueue ist eine priorit\u00e4tsorientierte Warteschlange, die stets das Element mit h\u00f6chster Priorit\u00e4t zur\u00fcckgibt (mit poll()).<br \/>\nDie Elemente sind nicht mehr gleichberechtigt wie bei der Standard-Warteschlange mit dem FIFO-Prinzip, sondern jedes Element besitzt sozusagen ein Rangabzeichen: je h\u00f6her der Rang (Priorit\u00e4t), desto weiter vorne wird das Element in die Warteschlange eingereiht.<br \/>\nEs gibt einige Methoden die nicht in anderen Collections Interfaces zu finden sind: <strong>peek<\/strong>(), <strong>poll<\/strong>() und <strong>offer<\/strong>().<\/p>\n<p>Nun ein einfaches Beispiel:<\/p>\n<p><code><br \/>\npublic class WarteSchlangenBeispiel {<\/p>\n<p>\tenum Todo { AUFSTEHEN, ESSEN, ARBEITEN, TEE_KOCHEN };<\/p>\n<p>\tstatic class InversSorter implements Comparator<Todo>{<\/p>\n<p>\t\t@Override<br \/>\n\t\tpublic int compare(Todo o1, Todo o2) {<br \/>\n\t\t\treturn o2.ordinal() - o1.ordinal();<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>\tpublic static void main(String[] args) {<\/p>\n<p>\t\tInversSorter sorter = new InversSorter();<\/p>\n<p>\t\tPriorityQueue<Todo> prioSchlange = new PriorityQueue<Todo>(Todo.values().length, sorter);<br \/>\n\/\/ es gibt auch ein Konstruktor ohne Comparator z.B.<br \/>\n\/\/ PriorityQueue<Todo> prioSchlange = new PriorityQueue<Todo>();<\/p>\n<p>\t\tfor (Todo todo : Todo.values()) {<br \/>\n\t\t\tprioSchlange.<strong>offer<\/strong>(todo); \/\/ Schlange laden = prioSchlange.add(todo)<br \/>\n\t\t}<\/p>\n<p>\t\tSystem.out.println(\"Anzahl Todos nach dem laden =\" + prioSchlange.size());<\/p>\n<p>\t\tSystem.out.println(\"Was hat die h\u00f6chste priorit\u00e4t? \" + prioSchlange.<strong>peek<\/strong>() + \"n\"); \/\/ mit prioSchlange.<strong>poll<\/strong>()<br \/>\n                                            \/\/ w\u00fcrde das Objekt auch gel\u00f6scht werden<\/p>\n<p>\t\tfor (int i = 0; i < Todo.values().length; i++) {\t\t\t\t\t\t\t\t\n\t\t\tSystem.out.println(prioSchlange.<strong>poll<\/strong>());<br \/>\n\t\t}<\/p>\n<p>\t\tSystem.out.println(\"Anzahl Todos=\" + prioSchlange.size());<br \/>\n\t}<br \/>\n}<br \/>\n<\/code><\/p>\n<p>Also <strong>offer<\/strong>() ist das gleiche wie <strong>add<\/strong>() und f\u00fcgt ein Objekt zu der Warteschlange hinzu.<\/p>\n<p>Und <strong>peek<\/strong>() \u00fcbertr\u00e4gt immer das Objekt mit der h\u00f6chsten Priorit\u00e4t oder vom Kopf der Warteschlange <strong>ohne<\/strong> es zu l\u00f6schen.<\/p>\n<p>Im Gegensatz dazu <strong>poll<\/strong>() welches auch das Objekt mit der h\u00f6chsten Priorit\u00e4t liefert aber das Element von der Warteschlange <strong>l\u00f6scht<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ab Java 1.5 gibt es die PriorityQueue im java.util Package und ist somit ein Teil des Java Collections Frameworks. Diese erweiterte Form einer Warteschlange ist ua. f\u00fcr diskreter Ereignissimulationen n\u00fctzlich. Diese Klasse ist nicht synchronized.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[54,77,100],"class_list":["post-138","post","type-post","status-publish","format-standard","hentry","category-java","tag-jdk15","tag-priorityqueue","tag-warteschlange"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=138"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/138\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=138"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}