Existe alguma diferença prática real entre a SortedList<TKey,TValue>
e a SortedDictionary<TKey,TValue>
? Existem circunstâncias em que você usaria especificamente um e não o outro?
c#
.net
generics
sortedlist
sorteddictionary
Shaul Behr
fonte
fonte
SortedList<TKey,TValue>
vez de umSortedList<T>
? Por que não implementaIList<T>
?Respostas:
Sim - suas características de desempenho diferem significativamente. Provavelmente seria melhor chamá-los
SortedList
e,SortedTree
como isso reflete a implementação mais de perto.Consulte os documentos do MSDN de cada um deles (
SortedList
,SortedDictionary
) para obter detalhes do desempenho de diferentes operações em diferentes situações. Aqui está um bom resumo (dosSortedDictionary
documentos):(
SortedList
na verdade, mantém uma matriz classificada, em vez de usar uma árvore. Ainda usa a pesquisa binária para encontrar elementos.)fonte
Aqui está uma exibição tabular, se ajudar ...
De uma perspectiva de desempenho :
De uma perspectiva de implementação :
Para cerca de paráfrase, se você precisar de desempenho bruto
SortedDictionary
poderia ser uma escolha melhor. Se você precisar de menos sobrecarga de memória e recuperação indexada, seráSortedList
melhor. Veja esta pergunta para saber mais sobre quando usar qual.Você pode ler mais aqui , aqui , aqui , aqui e aqui .
fonte
BDictionary<Key,Value>
em LoycCore em vez deSortedDictionary
.BDictionary
geralmente é mais lento do queSortedDictionary
exceto para tamanhos muito grandes, mas é mais rápido do queSortedList
se houver mais de 700 itens. O uso da memória deve ser apenas ligeiramente maior queSortedList
(muito menor queSortedDictionary
), devido ao uso de matrizes nas folhas da árvore.Eu abri o Reflector para dar uma olhada nisso, pois parece haver um pouco de confusão
SortedList
. Na verdade, não é uma árvore de pesquisa binária, é uma matriz classificada (por chave) de pares de valores-chave . Há também umaTKey[] keys
variável que é classificada em sincronia com os pares de valores-chave e usada para pesquisa binária.Aqui está uma fonte (visando o .NET 4.5) para fazer backup de minhas reivindicações.
Membros privados
SortedList.ctor (IDictionary, IComparer)
SortedList.Add (TKey, TValue): void
SortedList.RemoveAt (int): void
fonte
Confira a página do MSDN para SortedList :
Na seção Observações:
fonte
Esta é uma representação visual de como os desempenhos se comparam.
fonte
Já foi dito o suficiente sobre o assunto, no entanto, para simplificar, aqui está minha opinião.
O dicionário ordenado deve ser usado quando-
Por outro lado, a lista classificada deve ser usada quando-
Espero que isto ajude!!
fonte
O acesso ao índice (mencionado aqui) é a diferença prática. Se você precisar acessar o sucessor ou predecessor, precisará SortedList. O SortedDictionary não pode fazer isso, portanto você é bastante limitado em como pode usar a classificação (primeiro / foreach).
fonte