Tipos de coleção classificada
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>, as quais implementam a interface IDictionary, mas mantêm seus elementos em ordem de classificação por chave, e não têm inserção O(1) e recuperação característica das tabelas de hash. As três classes têm várias características 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
O nongeneric SortedList retorna a classe DictionaryEntry objetos quando enumerado, embora os dois tipos de genéricos retornam KeyValuePair<TKey, TValue> objetos.
Elementos são classificados de acordo com um System.Collections.IComparer implementação (para nongeneric SortedList) ou um System.Collections.Generic.IComparer<T> implementação (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 ordenadas e a classe SortedDictionary<TKey, TValue>.
Classe não genérica SortedList e classe genérica SortedList<TKey, TValue>. |
Classe genérica SortedDictionary<TKey, TValue>. |
---|---|
As propriedades que retornam chaves e valores são indexadas, permitindo recuperação indexada eficiente. |
Recuperação não indexada. |
Recuperação é O(logn). |
Recuperação é O(logn). |
Inserção e remoção são geralmente O (n); no entanto, inserção é O(1) para dados que já estejam em ordem de classificação, assim, cada elemento é adicionado ao fim da lista. (Isso pressupõe que um redimensionamento não é necessário.) |
Inserção e remoção são O(logn). |
Utiliza menos memória 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 classificadas ou dicionários que possa ser acessados simultaneamente de vários threads, você pode adicionar lógica de ordenação para uma classe que deriva de ConcurrentDictionary<TKey, TValue>.
Observação
Para valores que contenham suas próprias chaves (por exemplo, registros de funcionários que contêm um número de identificação 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 a classe genérica KeyedCollection<TKey, TItem>.
Começando com o .NET Framework versão 4, o SortedSet<T> classe fornece uma árvore de self-balancing que mantém os dados em ordem classificada após inserções, exclusões e pesquisas. Essa classe e o HashSet<T> classe implementar a ISet<T> interface.
Consulte também
Referência
System.Collections.IDictionary
System.Collections.Generic.IDictionary<TKey, TValue>
ConcurrentDictionary<TKey, TValue>