Gesorteerde verzamelingstypen
De System.Collections.SortedList klasse, de System.Collections.Generic.SortedList<TKey,TValue> algemene klasse en de System.Collections.Generic.SortedDictionary<TKey,TValue> algemene klasse zijn vergelijkbaar met de Hashtable klasse en de Dictionary<TKey,TValue> algemene klasse omdat ze de IDictionary interface implementeren, maar ze behouden hun elementen in sorteervolgorde op sleutel en ze hebben geen O(1) invoeg- en ophaalkenmerken van hash-tabellen. De drie klassen hebben verschillende functies gemeen:
Alle drie de klassen implementeren de System.Collections.IDictionary interface. De twee algemene klassen implementeren ook de System.Collections.Generic.IDictionary<TKey,TValue> algemene interface.
Elk element is een sleutel-waardepaar voor opsommingsdoeleinden.
Notitie
De niet-generische SortedList klasse retourneert DictionaryEntry objecten wanneer ze worden geïnventariseerd, hoewel de twee algemene typen objecten retourneren KeyValuePair<TKey,TValue> .
Elementen worden gesorteerd op basis van een System.Collections.IComparer implementatie (voor niet-genrische SortedList) of een System.Collections.Generic.IComparer<T> implementatie (voor de twee algemene klassen).
Elke klasse biedt eigenschappen die verzamelingen retourneren die alleen de sleutels of alleen de waarden bevatten.
De volgende tabel bevat enkele verschillen tussen de twee gesorteerde lijstklassen en de SortedDictionary<TKey,TValue> klasse.
SortedList niet-genrische klasse en SortedList<TKey,TValue> algemene klasse | SortedDictionary<TKey,TValue> algemene klasse |
---|---|
De eigenschappen die sleutels en waarden retourneren, worden geïndexeerd, waardoor efficiënt geïndexeerd kan worden opgehaald. | Geen geïndexeerde ophaalbewerking. |
Ophalen is O(log n ). |
Ophalen is O(log n ). |
Invoeging en verwijdering zijn over het algemeen O(n ); invoeging is echter O(logboek n ) voor gegevens die al in sorteervolgorde staan, zodat elk element wordt toegevoegd aan het einde van de lijst. (Hierbij wordt ervan uitgegaan dat een formaat niet vereist is.) |
Invoeging en verwijdering zijn O(logboek n ). |
Gebruikt minder geheugen dan een SortedDictionary<TKey,TValue>. | Gebruikt meer geheugen dan de SortedList niet-genrische klasse en de SortedList<TKey,TValue> algemene klasse. |
Voor gesorteerde lijsten of woordenlijsten die gelijktijdig toegankelijk moeten zijn vanuit meerdere threads, kunt u sorteerlogica toevoegen aan een klasse die is afgeleid van ConcurrentDictionary<TKey,TValue>. Bij het overwegen van onveranderbaarheid volgen de volgende onveranderbare typen vergelijkbare sorteersemantiek: ImmutableSortedSet<T> en ImmutableSortedDictionary<TKey,TValue>.
Notitie
Voor waarden die hun eigen sleutels bevatten (bijvoorbeeld werknemersrecords die een werknemer-id-nummer bevatten), kunt u een sleutelverzameling maken met enkele kenmerken van een lijst en enkele kenmerken van een woordenlijst door de algemene klasse te gebruiken KeyedCollection<TKey,TItem> .
Vanaf .NET Framework 4 biedt de SortedSet<T> klasse een zelfverdelingsstructuur waarmee gegevens in gesorteerde volgorde worden bijgehouden na invoegingen, verwijderingen en zoekopdrachten. Deze klasse en de HashSet<T> klasse implementeren de ISet<T> interface.