Sorterade samlingstyper
Klassen System.Collections.SortedList , den System.Collections.Generic.SortedList<TKey,TValue> generiska klassen och den System.Collections.Generic.SortedDictionary<TKey,TValue> generiska klassen liknar Hashtable klassen och den Dictionary<TKey,TValue> generiska klassen i det att de implementerar IDictionary gränssnittet, men de underhåller sina element i sorteringsordning efter nyckel, och de har inte infognings- och hämtningsegenskaperna för O(1) för hash-tabeller. De tre klasserna har flera funktioner gemensamt:
Alla tre klasserna implementerar System.Collections.IDictionary gränssnittet. De två generiska klasserna implementerar också det System.Collections.Generic.IDictionary<TKey,TValue> generiska gränssnittet.
Varje element är ett nyckel/värde-par i uppräkningssyfte.
Kommentar
Den icke-generiska SortedList klassen returnerar DictionaryEntry objekt när de räknas upp, även om de två generiska typerna returnerar KeyValuePair<TKey,TValue> objekt.
Element sorteras enligt en System.Collections.IComparer implementering (för icke-generiska SortedList) eller en System.Collections.Generic.IComparer<T> implementering (för de två generiska klasserna).
Varje klass innehåller egenskaper som returnerar samlingar som endast innehåller nycklarna eller bara värdena.
I följande tabell visas några av skillnaderna mellan de två sorterade listklasserna och SortedDictionary<TKey,TValue> klassen.
SortedList icke-generisk klass och SortedList<TKey,TValue> generisk klass | SortedDictionary<TKey,TValue> generisk klass |
---|---|
Egenskaperna som returnerar nycklar och värden indexeras, vilket möjliggör effektiv indexerad hämtning. | Ingen indexerad hämtning. |
Hämtning är O(log n ). |
Hämtning är O(log n ). |
Infogning och borttagning är vanligtvis O(n ), men infogningen är O(log n ) för data som redan är i sorteringsordning, så att varje element läggs till i slutet av listan. (Detta förutsätter att en storleksändring inte krävs.) |
Infogning och borttagning är O(log n ). |
Använder mindre minne än en SortedDictionary<TKey,TValue>. | Använder mer minne än den SortedList icke-generiska klassen och den SortedList<TKey,TValue> generiska klassen. |
För sorterade listor eller ordlistor som måste vara tillgängliga samtidigt från flera trådar kan du lägga till sorteringslogik i en klass som härleds från ConcurrentDictionary<TKey,TValue>. När du överväger oföränderlighet följer följande motsvarande oföränderliga typer liknande sorteringssemantik: ImmutableSortedSet<T> och ImmutableSortedDictionary<TKey,TValue>.
Kommentar
För värden som innehåller sina egna nycklar (till exempel medarbetarposter som innehåller ett nummer för medarbetar-ID) kan du skapa en nyckelsamling som har vissa egenskaper för en lista och vissa egenskaper för en ordlista genom att härleda från den KeyedCollection<TKey,TItem> generiska klassen.
Från och med .NET Framework 4 SortedSet<T> tillhandahåller klassen ett självbalanseringsträd som underhåller data i sorterad ordning efter infogningar, borttagningar och sökningar. Den här klassen och HashSet<T> klassen implementerar ISet<T> gränssnittet.