Tipi di raccolta 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 gestiscono l'ordinamento degli elementi in base alla chiave e non hanno la caratteristica di inserimento e recupero O(1) propria delle tabelle hash. Le tre classi hanno diverse funzionalità in comune:
Le tre classi implementano tutte l'interfaccia System.Collections.IDictionary. Le due classi generiche implementano anche l'interfaccia generica System.Collections.Generic.IDictionary<TKey,TValue>.
Ogni elemento è una coppia chiave/valore per scopi di enumerazione.
Nota
Con l'enumerazione la classe non generica SortedList restituisce oggetti DictionaryEntry, anche se i due tipi generici restituiscono oggetti KeyValuePair<TKey,TValue>.
Gli elementi vengono ordinati in base a un'implementazione di System.Collections.IComparer (per SortedList non generica) o in base a un'implementazione di System.Collections.Generic.IComparer<T> (per le due classi generiche).
Ogni classe specifica le proprietà che restituiscono raccolte contenenti solo chiavi o solo valori.
La tabella seguente elenca alcune 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 vengono indicizzate, consentendo un efficiente recupero indicizzato. | Senza recupero indicizzato. |
Il recupero è O(log n ). |
Il recupero è O(log n ). |
L'inserimento e la rimozione sono in genere O(n ); l'inserimento è tuttavia O(logn ) per i dati già presenti nell'ordinamento, in modo che ogni elemento venga aggiunto alla fine dell'elenco. (Ciò presuppone che non sia necessario un ridimensionamento). |
L'inserimento e la rimozione sono O(log n ). |
Usa meno memoria di un SortedDictionary<TKey,TValue>. | Usa più memoria della classe non generica SortedList e della classe generica SortedList<TKey,TValue>. |
Per gli elenchi ordinati o i dizionari che devono essere accessibili contemporaneamente da più thread, è possibile aggiungere logica di ordinamento per una classe che deriva da ConcurrentDictionary<TKey,TValue>. Quando si considera l'immutabilità, i tipi non modificabili corrispondenti seguenti seguono una semantica di ordinamento simile: ImmutableSortedSet<T> e ImmutableSortedDictionary<TKey,TValue>.
Nota
Per i valori che contengono chiavi specifiche (ad esempio, record dei dipendenti che contengono un numero di ID dipendente) è possibile creare una raccolta con chiave che include alcune caratteristiche di un elenco e alcune caratteristiche di un dizionario mediante la derivazione dalla classe generica KeyedCollection<TKey,TItem>.
A partire da .NET Framework 4, la classe SortedSet<T> presenta una struttura ad albero auto-bilanciata che mantiene ordinati i dati dopo che sono stati inseriti, eliminati o cercati. Questa classe e la classe HashSet<T> implementano l'interfaccia ISet<T>.