Ich baue eine Anwendung, die eine Sammlung von etwa 10k Strings erfordert.
Die Sammlung wird als Warteschlange verwendet.
So wurde in C # durch verschiedene Auflistungstypen gesucht, aber konnte nicht herausgefunden werden, welche die beste Leistung in Bezug auf die Geschwindigkeit des Put- und Get-Vorgangs in der Warteschlange hat. Außerdem sollte es möglich sein, Duplikate in der Warteschlange / Sammlung nicht zuzulassen.
BEARBEITEN basierend auf den Kommentaren ..
Jede vorhandene Sammlung wird hilfreich sein. Oder eine benutzerdefinierte Sammlung, die eine vorhandene Sammlung ausführen könnte, ist großartig.
Danke
Es gibt die Klasse OrderedDictionary , die den Anzeigenauftrag jedoch beibehält erlaubt es Ihnen, Werte nach Schlüssel zu suchen.
Wenn Sie auf der Suche sind nach Hochleistungs-Put & amp; Wenn Sie nach Eindeutigkeit suchen (doppelte Prüfung), aber die Reihenfolge nicht wichtig ist (keine Warteschlange), verwenden Sie HashSet<T>
Wenn die Warteschlangenfunktion wichtiger ist, verwenden Sie eine Queue<T>
Ich denke nicht, dass es etwas gibt, was beides bietet.
Macht es Ihnen etwas aus, O (2n) Speicher zu verbrauchen? Sie könnten eine Warteschlange & lt; & gt; in Kombination mit einem Wörterbuch & lt;, & gt ;. Die Warteschlange würde die Warteschlangen- und die Warteschlangenoperation behandeln, und das Wörterbuch würde eindeutige Einträge sicherstellen. Eine einfache Wrapper-Klasse könnte diese beiden kombinieren, und es würde Ihnen O (log n) Queue geben und die Warteschlange entziehen.
Beispiel:
%Vor%Ein Einfügen in diese benutzerdefinierte Datenstruktur überprüft, ob das Wörterbuch das Element bereits enthält. Diese Operation verwendet die ContainsKey-Methode, die eine O (log n) -Operation ist. Wenn das Element bereits in der Datenstruktur enthalten war, wird die Methode beendet. Wenn das Element nicht enthalten ist, wird das Element in die Warteschlange eingefügt, bei der es sich um eine konstante O (1) -Operation handelt. Es wird auch dem Wörterbuch hinzugefügt. Wenn die Zählung des Wörterbuchs kleiner ist als die Kapazität, nähert sich dies einer konstanten Einfügungszeit von O (1). Die Gesamtwarteschlangenzeit ist daher O (log n).
Das gleiche gilt für die Ausbuchungsmethode.
Diese Lösung ist im Grunde genommen die gleiche wie die integrierte Datenstruktur OrderedDictionary, da jedoch diese Lösung generische verwendet, gibt es keinen Overhead beim Boxing / Unboxing in ihren Operationen, wodurch sie schneller verschwendet wird.
Tags und Links c# performance collections