|
|
Veröffentlicht am 20.10.2025, 10:02:53
|
|
|
|

.NET 6 führt einen neuen Sammlungstyp ein, PriorityQueue, der, wie der Name schon sagt, zusätzlich zur normalen Warteschlange Prioritätsunterstützung hinzufügt. Hinweis: Er ist esNicht gewindesicher, du musst auf Sicherheitsaspekte bei Threads achten.
Quelle:Der Hyperlink-Login ist sichtbar.
Loslegen
Schauen wir uns ein einfaches Anwendungsbeispiel an:
Beispielausgabe:
Man sieht, dass die Reihenfolge der Ausgabe entgegengesetzt ist zu der Reihenfolge, die wir hinzugefügt haben. PriorityQueue beginnt mit der kleinsten Priorität beim Dequeue, je kleiner der Wert, desto höher die Priorität, je höher die Priorität, je höher die Priorität, je höher die Priorität, desto mehr Priorität ist die Ausgabe. Wenn wir zuerst die maximale Ausgabe wollen, ist das in Ordnung? Die Antwort ist ja, aber wir müssen unsere eigenen Prioritätsvergleichsregeln festlegen. Sie können sich auf folgendes Beispiel beziehen.
Szenen
Mit automatischer Sortierung mit Priorität können wir PriorityQueue verwenden, wenn wir eine Auto-Sortierung benötigen
Nachrichtenwarteschlange
Mit PriorityQueue kann eine Prioritätsnachrichtenwarteschlange implementiert werden, die es den Nutzern ermöglicht, die Priorität einer Nachricht beim Senden einer Nachricht anzugeben, die beim Konsumieren priorisiert wird.
Im obigen Beispiel geben wir standardmäßig eine int als Prioritätstyp an und fügen einige Nachrichten in die Warteschlange ein, aber es gibt oft viele Nachrichten, und es kann Situationen mit derselben Priorität geben, die wir nutzen könnenZeit und Intelligenz als föderierter PrioritätstypSie können sich auf folgendes Beispiel beziehen:
Ein Beispiel für die Ausgabe ist wie folgt:
Aus den obigen Ergebnissen geht hervor, dass wir im Fall von Priorität zunächst Nachrichten mit weniger Zeit verarbeiten oder die Sortiermethode nach unseren eigenen Bedürfnissen anpassen und die Prioritätsvergleichslogik anpassen.
Rang
PriorityQueue kann auch in vielen Bewertungsanwendungen verwendet werden, wie zum Beispiel in der Bewertung der Schülerleistungen
Werfen Sie einen Blick auf den Beispielcode unten:
Die obige Liste ist eine Liste von Noten, schreibe einfach ein paar Testdaten, über die UnorderedItems von PriorityQueue können wir die Daten vor der Sortierung erhalten, und es ist auch die Reihenfolge, in der wir uns der Warteschlange anschließen (Enqueue). Der Standardvergleich ist der kleine Erste, also der niedrige Wert ist erst, dann wollen wir von größte zu kleinste sortieren, um die Vergleichsmethode anzupassen.
Der obige High2LowComparer ist ein benutzerdefinierter Vergleich, der tatsächlich eine Inversion des Vergleichsergebnisses ist, und der Code ist wie folgt:
Die obige Ausgabe ist wie folgt:
Mehr
Es gibt einen zset(sortedSet)-Datentyp in Redis, der ähnliche Dinge tun kann, aber es gibt dennoch einige Unterschiede zwischen zset und PriorityQueue: zset ist eine Menge, eine Sammlung, die automatisch dedupliziert. Während PriorityQueue weiterhin eine Warteschlange ist, wird nicht dedupliziert; zset kann die Priorität (Score) des entsprechenden Elements ändern, aber PriorityQueue Derzeit wird es nicht unterstützt, die entsprechende Priorität eines Elements zu ändern
PriorityQueue kann einige unserer Probleme lösen, aber es gibt ein paar Dinge, die man bei der Nutzung beachten sollte:
- Erstens, wenn die Priorität gleich ist, kann die Reihenfolge der Ausgabe unterschiedlich sein, was durch den internen Implementierungsalgorithmus bestimmt wird, und die Reihenfolge kann nicht streng garantiert werden
- PriorityQueue ist nicht threadsicher, und threadsichere Probleme müssen beachtet werden
- Die Peek-Methode in PriorityQueue ruft nur das nächste Element in der Warteschlange ab, entfernt es aber nicht aus der Warteschlange
(Ende) |
Vorhergehend:Douyin Mall Crawler-Analyse, Positionierung von 6 Göttern, Risikokontrollanalyse, jetzt sollten es 7 Götter X-Perseus seinNächster:Links zu EBPF-bezogenem Wissen
|