Questo potrebbe sembrare un duplicato di questo question, che chiede "Qual è la differenza tra SortedList e SortedDictionary?" Sfortunatamente, le risposte non fanno altro che citare la documentazione MSDN (che afferma chiaramente che ci sono delle prestazioni e le differenze nell'uso della memoria tra i due) ma in realtà non rispondono alla domanda.Quando utilizzare un SortedList <TKey, TValue> su un SortedDictionary <TKey, TValue>?
In realtà (e quindi a questa domanda non ottiene le stesse risposte), in base a MSDN:
Il
SortedList<TKey, TValue>
generica classe è un albero binario di ricerca con O (log n) il recupero, in cui n è il numero di elementi nel dizionario. In questo è simile alla classe generica . Le due classi hanno modelli di oggetti simili ed entrambi hanno il recupero di O (log n) . Dove i due classi differiscono è in uso la memoria e la velocità di inserimento e la rimozione:
SortedList<TKey, TValue>
utilizza meno memoria diSortedDictionary<TKey, TValue>
.
SortedDictionary<TKey, TValue>
ha inserimento rapido e rimozione operazioni per dati non ordinati, O (log n) al contrario di O (n) perSortedList<TKey, TValue>
.Se l'elenco è popolato tutto in una volta dai dati ordinati,
SortedList<TKey, TValue>
è più veloce diSortedDictionary<TKey, TValue>
.
Quindi, chiaramente questo sarebbe indicato che SortedList<TKey, TValue>
è la scelta migliore a meno che non si inserisce bisogno di più velocemente e rimuovere le operazioni della non ordinati dati.
La domanda rimane ancora, date le informazioni sopra quali sono le ragioni pratiche (mondo reale, business case, ecc.) Per l'utilizzo di SortedDictionary<TKey, TValue>
? In base alle informazioni sul rendimento, ciò implicherebbe che non è affatto necessario avere SortedDictionary<TKey, TValue>
.
Si noti che la sezione che si citi dice praticamente tutto. Si noti tuttavia che la propria affermazione relativa a "operazioni di inserimento e rimozione più veloci per dati non ordinati" non è del tutto corretta. Quello che in realtà sta dicendo è che le operazioni "Inserisci e rimuovi" sono sempre più complesse nel tempo su una SortedList. L'affermazione sui "dati non ordinati" si riferisce solo all'inizializzazione di queste strutture con i dati attraverso i loro costruttori. – jerryjvl
Questo sembra essere rilevante su .NET 2.0. L'implementazione di SortedList sembra essere cambiata dal 3.0 in poi. Recentemente ho avuto bisogno di una risposta a questa domanda e ho scoperto che questa domanda e le sue risposte potrebbero non essere più rilevanti per gli utenti di .NET 4.5. –
Jeremy