Tipos de coleção Sorted
A classe System.Collections.SortedList, a classe genérica System.Collections.Generic.SortedList<TKey,TValue> e a classe genérica System.Collections.Generic.SortedDictionary<TKey,TValue> são semelhantes à classe Hashtable e à classe genérica Dictionary<TKey,TValue>, pois elas implementam a interface IDictionary, mas mantêm seus elementos em ordem de classificação por chave e não têm a inserção de O(1) nem a característica de recuperação das tabelas de hash. As três classes têm várias funcionalidades em comum:
Todas as três classes implementam a interface System.Collections.IDictionary. As duas classes genéricas também implementam a interface genérica System.Collections.Generic.IDictionary<TKey,TValue>.
Cada elemento é um par chave/valor para fins de enumeração.
Observação
A classe não genérica SortedList retorna objetos DictionaryEntry quando enumerada, embora os dois tipos genéricos retornem objetos KeyValuePair<TKey,TValue>.
Os elementos são classificados de acordo com uma implementação de System.Collections.IComparer (para a SortedList não genérica) ou uma implementação de System.Collections.Generic.IComparer<T> (para as duas classes genéricas).
Cada classe fornece propriedades que retornam coleções contendo apenas as chaves ou apenas os valores.
A tabela a seguir lista algumas das diferenças entre as duas classes de listas classificadas e a classe SortedDictionary<TKey,TValue>.
SortedList classe não genérica e SortedList<TKey,TValue> classe genérica | SortedDictionary<TKey,TValue> classe genérica |
---|---|
As propriedades que retornam chaves e valores são indexadas, permitindo uma recuperação indexada eficiente. | Recuperação não indexada. |
A recuperação é O(log n ). |
A recuperação é O(log n ). |
A inserção e a remoção são geralmente O(n ). No entanto, a inserção é O(log n ) para dados que já estão em ordem de classificação, de forma que cada elemento seja adicionado ao final da lista. (Isso pressupõe que um redimensionamento não é necessário.) |
A inserção e a remoção são O(log n ). |
Usa menos memória do que um SortedDictionary<TKey,TValue>. | Usa mais memória do que a classe não genérica SortedList e a classe genérica SortedList<TKey,TValue>. |
Para listas ou dicionários classificados que precisam estar acessíveis simultaneamente em vários threads, você pode adicionar a lógica de classificação a uma classe derivada de ConcurrentDictionary<TKey,TValue>. Ao considerar a imutabilidade, os seguintes tipos imutáveis correspondentes seguem uma semântica de classificação semelhante: ImmutableSortedSet<T> e ImmutableSortedDictionary<TKey,TValue>.
Observação
Para valores que contêm suas próprias chaves (por exemplo, registros de funcionários que contêm um número de ID do funcionário), você pode criar uma coleção com chave que tem algumas características de uma lista e algumas características de um dicionário, derivando da classe genérica KeyedCollection<TKey,TItem>.
A partir do .NET Framework 4, a classe SortedSet<T> fornece uma árvore de balanceamento automático que mantém os dados na ordem classificada após inserções, exclusões e pesquisas. Essa classe e a classe HashSet<T> implementam a interface ISet<T>.