Você precisa cavar um pouco para ver como o Dicionário é implementado em C # - não é tão óbvio quanto o HashMap (uma tabela de hash) ou o TreeMap (uma árvore classificada) (ou ConcurrentSkipListMap - uma lista de ignorados ).
Se você se aprofundar na seção "Comentários":
A classe genérica Dictionary fornece um mapeamento de um conjunto de chaves para um conjunto de valores. Cada adição ao dicionário consiste em um valor e sua chave associada. A recuperação de um valor usando sua chave é muito rápida, próxima a O (1), porque a classe Dictionary é implementada como uma tabela de hash.
E aí temos que. É uma tabela de hash . Observe que eu vinculei o artigo da Wikipedia lá - é uma leitura bastante boa. Você pode ler a seção sobre resolução de colisão. É possível obter um conjunto de dados patológicos em que a pesquisa retorne para O (N) (por exemplo, tudo o que você insere cai no mesmo valor ou índice de hash na tabela de hash por algum motivo e fica com a verificação linear ).
Embora o Dictionary seja uma solução de uso geral, você não deve usar tipos concretos (como o Dictionary) - você deve usar as interfaces. Nesse caso, essa interface é IDictionary
( docs ). Para isso, você é perfeitamente capaz de escrever sua própria implementação de dicionário que faz as coisas da melhor maneira possível para os dados que você possui.
Quanto à eficiência de várias pesquisas / contém?
- Percorrendo uma lista não classificada: O (N)
- Pesquisa binária de uma matriz classificada: O (log N)
- Árvore classificada: O (log N)
- Tabela de hash: O (1)
Para a maioria das pessoas, a tabela de hash é o que elas desejam.
Você pode achar que o SortedDictionary é o que você deseja:
A SortedDictionary<TKey, TValue>
classe genérica é uma árvore de pesquisa binária com recuperação de O (log n), em que n é o número de elementos no dicionário. A esse respeito, é semelhante à SortedList<TKey, TValue>
classe genérica. As duas classes têm modelos de objetos semelhantes e ambas têm recuperação O (log n).
Porém, novamente, se a estrutura de dados não é aquela que funciona idealmente com seus dados, você recebe as ferramentas (as interfaces) para poder escrever uma que funcione melhor para seus dados.
O dicionário em si é um tipo de dados abstrato . Você me fornece um dicionário e eu sei o que posso fazer com ele e todas as ferramentas existentes para que eu possa usar pela natureza de ser um dicionário. Se você me desse uma ArrayList, eu me veria escrevendo meu próprio código para pesquisar, inserir ou excluir itens da lista. Isso desperdiça meu tempo e também significa que há mais chances de ocorrer um erro, pois copio o código repetidamente de um local para outro.
Data Structures
Este link wiki pode ser de mais ajuda para você