Diferença entre dicionário e Hashtable

Dictionary vs Hashtable

O dicionário é digitado (para que os tipos de valor não precisem de combinação), um Hashtable não é (para que os tipos de valor precisem de combinação). O Hashtable tem uma maneira mais agradável de obter um valor que o dicionário IMHО, porque sempre sabe que o valor é um objeto. Se você estiver usando o .NET 3.5, é fácil escrever um método extenso para o dicionário para obter um comportamento semelhante.

A classe Hashtable é um tipo específico de classe de dicionário que usa um valor inteiro (chamado de hash) para auxiliar no armazenamento de suas chaves. A classe Hashtable usa o hash para acelerar a pesquisa de uma chave específica na coleção. Todo objeto no .NET deriva da classe Objeto. Essa classe suporta o método GetHash, que retorna um número inteiro que identifica exclusivamente o objeto. A classe Hashtable é uma coleção muito eficiente em geral. O único problema da classe Hashtable é que ela requer um pouco de despesas gerais e, para pequenas cobranças (menos de dez elementos), a despesas gerais pode impedir o desempenho.

Há uma diferença mais importante entre uma HashTable e Dictionary. Se você usar indexadores para obter um valor de uma HashTable, a HashTable retornará com êxito nulo para um item inexistente, enquanto o Dicionário exibirá um erro se você tentar acessar um item usando um indexador que não existe no Dicionário..

O HashTable é a classe base que é fracamente digitada; a classe abstrata DictionaryBase é tipicamente digitada e usa internamente um HashTable.

Uma coisa estranha observada no Dictionary é que, quando adicionamos várias entradas no Dictionary, a ordem na qual as entradas são adicionadas é mantida. Assim, se você aplicar uma pesquisa no dicionário, obterá os registros no mesmo pedido em que os inseriu. Considerando que isso não é verdade com HashTable normal, quando você adiciona mesmos registros no Hashtable, o pedido não é mantido. Se o 'Dictionary for baseado no Hashtable' for verdadeiro, por que o Dictionary mantém a ordem, mas o HashTable não o faz?

Por que eles se comportam de maneira diferente, é porque o Generic Dictionary implementa uma hashtable, mas não se baseia no System.Collection onHashtable. A implementação do Dicionário Genérico é baseada em todos os pares de valores-chave de uma lista. Eles são indexados com os buckets de hashtable para acesso aleatório, mas quando ele retorna um número, ele apenas percorre a lista em um pedido seqüencial - que será o pedido de inserção, desde que as entradas não sejam reutilizadas.