Hoje veremos as diferenças entre as classes Hashtable e Dictionary. |
Hashtable
Um Hashtable é uma coleção de pares de chave/valor que são organizados com base no código hash da chave.
Uma Hashtable é usada para criar uma coleção que usa uma tabela de hash para armazenamento.
Quando você insere um par chave/valor em uma Hashtable, ela rastreia automaticamente qual chave pertence a qual valor e permite recuperar o valor que está associado com uma chave especificada rápida e facilmente.
Assim uma Hashtable é como um recipiente utilizado para armazenar dados em pares de chave/valor onde as chaves são usadas como índice e ajudam a localizar os valores rapidamente.
Exemplo de código:
using System; using System.Collections; namespace Hash_Dict1 // incluindo um par key/value
foreach (DictionaryEntry elemento in minhaTabelaHash) |
Resultado:
Lembrando que não podem existir chaves duplicadas em uma Hashtable e se você tentar adicionar uma chave que já existe vai ocorrer uma exceção.
Outro detalhe importante é que quando usamos um laço foreach para percorrer uma Hashtable recebemos como retorno um DictionaryEntry.
Dictionary
Um Dictionary é uma coleção genérica que geralmente é usada para armazenar pares chave/valor sendo dinâmico por natureza o que significa que o tamanho do dicionário cresce conforme a necessidade.
Um Dictionary esta baseado em uma tabela de hash, o que significa que ele usa uma pesquisa de hash, que é um algoritmo eficiente para procurar coisas onde ele mapeia uma chave para um valor e assim não pode ter chaves duplicadas,
Exemplo de código:
using System;
using System.Collections.Generic;
namespace Hash_Dict1
{
internal class Program
{
private static void Main(string[] args)
{
// Cria um dicionario
// usando a classe Dictionary<TKey, TValue>
Dictionary<string, string> meuDicionario = new Dictionary<string, string>();
// adiciona pares key/value
// usando o método Add()
meuDicionario.Add("a1", "Macoratti.net");
meuDicionario.Add("a2", "quase tudo");
meuDicionario.Add("a3", "para .NET");
foreach (KeyValuePair<string, string> elemento in meuDicionario)
{
Console.WriteLine("Key:- {0} e Value:- {1}",
elemento.Key, elemento.Value);
}
Console.ReadKey();
}
}
}
|
Resultado:
Diferenças entre
Hashtable e Dictionary
Hashtable | Dictionary |
---|---|
Uma Hashtable é uma coleção não genérica | Um Dictionary é uma coleção genérica |
Em uma Hashtable, você pode armazenar pares de chave/valor do mesmo tipo ou de tipos diferentes. | Em um Dictionary, você pode armazenar pares de chave/valor do mesmo tipo. |
Em uma Hashtable, não há necessidade de especificar o tipo de chave e valor. | Em um Dictionary você precisa especificar o tipo da chave e valor. |
A recuperação de dados é mais lenta do que em um Dictionary devido ao boxing/unboxing. | A recuperação de dados é mais rápida do que Hashtable devido a não ter que realizar o boxing/unboxing. |
Em uma Hashtable, se você tentar acessar uma chave que não está presente na Hashtable, ela fornecerá valores nulos. | Em um Dictionary, se você tentar acessar uma chave que não está presente no Dicionário , ocorrerá um erro. |
É Thread-Safe | É Thread safe somente para os membros públicos e estáticos |
Não mantém a ordem dos valores armazenados | Sempre mantém a ordem dos valores armazenados |
"Nisto consiste o amor:
não em que nós tenhamos amado a Deus, mas em que ele nos amou e enviou o seu
Filho como propiciação pelos nossos pecados."
1 João 4:10
Referências:
C# - Operações com Collections - Macoratti.net
C# - List x Dictionary - Macoratti.net
C# - Usando um Dicionário para armazenar e ... - Macoratti.net
C# - Apresentando Hashtable - Macoratti.net
C# - Escolhendo a coleção correta para sua ... - Macoratti.net
C# - Programação Funcional - Exemplos - Macoratti
C# - Coleções Imutáveis - Macoratti
C# 9.0 - Apresentando Records - Macoratti.net
C# - Os 10 Erros mais comuns dos iniciantes - Macoratti
C# - Otimizando o código - Macoratti