Tipi di insieme ordinati
La classe System.Collections.SortedList e le classi generiche System.Collections.Generic.SortedList<TKey, TValue> e System.Collections.Generic.SortedDictionary<TKey, TValue> sono simili alla classe Hashtable e alla classe generica Dictionary<TKey, TValue> in quanto implementano l'interfaccia IDictionary, ma si distinguono da queste perché mantengono i rispettivi elementi ordinati per chiave e non presentano la caratteristica di inserimento e recupero basata su O(1) delle tabelle hash. Le tre classi hanno diverse funzionalità comuni:
Tutte e tre le classi implementano l'interfaccia System.Collections.IDictionary. Le due classi generiche implementano anche l'interfaccia generica System.Collections.Generic.IDictionary<TKey, TValue>.
Ciascun elemento è costituito da una coppia chiave-valore a scopo di enumerazione.
Nota
In caso di enumerazione, la classe non generica SortedList restituisce oggetti DictionaryEntry, sebbene i due tipi generici restituiscano oggetti KeyValuePair<TKey, TValue>.
Gli elementi vengono ordinati in base a un'implementazione di System.Collections.IComparer (per la classe non generica SortedList) oppure in base a un'implementazione di System.Collections.Generic.IComparer<T> (per le due classi generiche).
Per ciascuna classe sono disponibili proprietà per la restituzione di insiemi contenenti solo le chiavi o solo i valori.
Nella seguente tabella sono riportate le differenze tra le due classi SortedList e la classe SortedDictionary<TKey, TValue>.
Classe non generica SortedList e classe generica SortedList<TKey, TValue> |
Classe generica SortedDictionary<TKey, TValue> |
---|---|
Le proprietà che restituiscono chiavi e valori sono indicizzate, in modo da rendere efficiente il recupero indicizzato. |
Il recupero indicizzato non è supportato. |
Il recupero è basato su O(log n). |
Il recupero è basato su O(log n). |
L'inserimento e la rimozione sono in genere basati su O(n). Tuttavia, per i dati già ordinati l'inserimento è basato su O(1), in modo che ciascun elemento venga aggiunto alla fine dell'elenco. Questo presuppone che non sia necessario un ridimensionamento. |
L'inserimento e la rimozione sono basati su O(log n). |
Viene utilizzata una minore quantità di memoria rispetto alla classe SortedDictionary<TKey, TValue>. |
Viene utilizzata una maggiore quantità di memoria rispetto alla classe non generica SortedList e alla classe generica SortedList<TKey, TValue>. |
Per dizionari o elenchi ordinati che devono essere accessibili contemporaneamente da più thread, è possibile aggiungere logica di ordinamento a una classe derivata da ConcurrentDictionary<TKey, TValue>.
![]() |
---|
Per i valori che contengono le rispettive chiavi, ad esempio i record dei dipendenti contenenti un ID dipendente, è possibile creare un insieme con chiavi che presenti alcune caratteristiche di un elenco e altre di un dizionario mediante la derivazione dalla classe generica KeyedCollection<TKey, TItem>. |
A partire da .NET Framework versione 4, la classe SortedSet<T> fornisce una struttura ad albero auto-bilanciata che mantiene i dati ordinati dopo operazioni di inserimento, eliminazione e ricerca. Questa classe e la classe HashSet<T> implementano l'interfaccia ISet<T>.
Vedere anche
Riferimenti
System.Collections.IDictionary
System.Collections.Generic.IDictionary<TKey, TValue>
ConcurrentDictionary<TKey, TValue>