Tabela hash C# com exemplos
⚡ Resumo Inteligente
Em C#, uma Hashtable é uma coleção do namespace System.Collections que armazena dados como pares chave-valor, onde cada chave exclusiva corresponde a um valor e a chave permite uma busca rápida desse valor armazenado.
O que é Hashtable em C#?
Uma tabela hash é uma coleção especial usada para armazenar itens de valor-chave. Portanto, em vez de armazenar apenas um valor como pilha, lista de array e fila, a tabela hash armazena 2 valores. Esses 2 valores formam um elemento da tabela hash.
Abaixo estão alguns exemplos de como podem ser os valores de uma tabela hash.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Acima temos 3 pares de valores-chave. As chaves de cada elemento são 001, 002 e 003 respectivamente. Os valores de cada par de valores-chave são “. Net“, “C#” e “ASP.Net” respectivamente.
Vejamos as operações disponíveis para a coleção Hashtable com mais detalhes.
Declaração da Hashtable
A declaração de uma Hashtable é mostrada abaixo. Um Hashtable é criado com a ajuda do tipo de dados Hashtable. A palavra-chave “new” é usada para criar um objeto de uma Hashtable. O objeto é então atribuído à variável ht.
Hashtable ht = new Hashtable()
Adicionando elementos ao Hashtable
O método Add é usado para adicionar um elemento ao fila. A sintaxe geral da instrução é fornecida abaixo
HashTable.add("key","value")
1 exemplo:
Lembre-se de que cada elemento da tabela hash é composto por 2 valores, um é a chave e o outro é o valor.
Agora, vamos ver isso funcionando no nível do código. Todo o código mencionado abaixo será gravado em nosso aplicativo de console.
O código será gravado em nosso arquivo Program.cs. No programa abaixo, escreveremos o código para ver como podemos usar os métodos mencionados acima.
Por enquanto, em nosso exemplo, veremos apenas como podemos criar uma hashtable, adicionar elementos à hashtable e exibi-los de acordo.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); ICollection keys = ht.Keys; foreach (String k in keys) { Console.WriteLine(ht[k]); } Console.ReadKey(); } } }
Code Explicação:-
- Primeiro, declaramos a variável hashtable usando o tipo de dados Hashtable usando a palavra-chave “Novo”. O nome da variável definida é 'ht'.
- Em seguida, adicionamos elementos à tabela hash usando o método Add. Lembre-se de que precisamos adicionar um elemento chave e um elemento de valor ao adicionar algo à tabela hash.
- Não existe uma maneira direta de exibir os elementos de uma tabela hash.
- Para exibir a tabela hash, primeiro precisamos obter a lista de chaves (001, 002 e 003) da tabela hash.
- Isso é feito através da interface ICollection. Este é um tipo de dados especial que pode ser usado para armazenar as chaves de coleções de hashtable. Em seguida, atribuímos as chaves da coleção hashtable à variável 'keys'.
- A seguir, para cada valor-chave, obtemos o valor associado na tabela hash usando a instrução ht[k].
Se o código acima for inserido corretamente e o programa for executado, a seguinte saída será exibida.
Saída:
Vejamos mais alguns métodos disponíveis para tabelas hash.
ContémChave
Este método é usado para verificar se uma chave está presente na Hashtable. Abaixo está a sintaxe geral desta instrução. A instrução retornará verdadeiro se a chave existir, caso contrário, retornará o valor falso.
Hashtable.Containskey(key)
ContémValor
Este método é usado para verificar se um valor está presente na tabela Hash. Abaixo está a sintaxe geral desta instrução. A instrução retornará verdadeiro se o Valor existir, caso contrário, retornará o valor falso.
Hashtable.ContainsValue(value)
2 exemplo:
Vamos mudar o código em nosso Aplicação da consola para mostrar como podemos usar os métodos “Containskey” e “ContainsValue”.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); Console.WriteLine(ht.ContainsKey("001")); Console.WriteLine(ht.ContainsValue("C#")); Console.ReadKey(); } } }
Code Explicação:-
- Primeiro, usamos o método ContainsKey para ver se a chave está presente na tabela hash. Este método retornará verdadeiro se a chave estiver presente na tabela hash. Este método deve retornar verdadeiro, pois a chave existe na tabela hash.
- Em seguida, usamos o método ContainsValue para ver se o valor está presente na tabela hash. Este método retornará 'true', pois o valor existe na tabela hash.
Se o código acima for inserido corretamente e o programa for executado, a seguinte saída será exibida.
Saída:
Na saída, você pode ver claramente que tanto a chave quanto o valor pesquisado estão presentes na tabela hash.
Como percorrer uma tabela hash em C#
Os exemplos acima leem valores através da coleção Keys, mas uma Hashtable pode ser percorrida de uma maneira mais limpa. Um loop foreach sobre um DictionaryEntry retorna a chave e o valor de cada elemento em uma única passagem, que é a maneira mais comum de ler uma Hashtable.
Passo 1) Crie uma tabela hash e adicione três pares de chave-valor a ela.
Passo 2) Percorra a tabela hash com uma variável DictionaryEntry e, em seguida, leia as propriedades Key e Value de cada entrada.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("101", "Java"); ht.Add("102", "Python"); ht.Add("103", "Kotlin"); foreach (DictionaryEntry entry in ht) { Console.WriteLine(entry.Key + " - " + entry.Value); } Console.ReadKey(); } } }
Code Explicação:-
- Uma tabela hash chamada ht é criada e três pares chave-valor são inseridos com o método Add.
- O loop foreach atribui cada elemento a um DictionaryEntry, cujas propriedades Key e Value expõem as duas metades do par.
Quando o programa é executado, ele imprime cada chave ao lado de seu valor, como por exemplo, 101 – JavaComo uma tabela hash não mantém a ordem de inserção, os pares podem aparecer em uma sequência diferente daquela em que foram adicionados. Para ler apenas as chaves, percorra a coleção `Keys`, e para ler apenas os valores, percorra a coleção `Values`.
Métodos e propriedades de tabelas hash em C#
A classe Hashtable expõe um pequeno conjunto de métodos e propriedades que abrangem quase todas as tarefas necessárias, desde adicionar e remover pares até verificar a associação e contar elementos. Os membros mais úteis estão listados abaixo.
| Vogal | Formato | Descrição |
|---|---|---|
| Adicionar(chave, valor) | Forma | Insere um novo par chave-valor; a chave deve ser única. |
| Remover(chave) | Forma | Exclui o elemento que corresponde à chave especificada. |
| Claro() | Forma | Remove todos os pares chave-valor da tabela hash. |
| ContémChave(chave) | Forma | Retorna verdadeiro quando a chave fornecida estiver presente. |
| ContémValor(valor) | Forma | Retorna verdadeiro quando o valor fornecido estiver presente. |
| Contar | Propriedade | Obtém o número de pares chave-valor armazenados. |
| As chaves | Propriedade | Retorna uma coleção de todas as chaves. |
| Valores | Propriedade | Retorna uma coleção de todos os valores. |
Como cada chave é transformada em hash, o ContainsKey e o indexador localizam um elemento em tempo quase constante, o que torna uma tabela hash tão útil para buscas rápidas.
Diferença entre Hashtable e Dictionary em C#
Tanto uma Hashtable quanto um Dictionary armazenam pares de chave-valor e ambos pertencem à família mais ampla de classes do C#. coleçõesA diferença crucial reside na segurança de tipos, e essa diferença determina qual você deve usar em um novo código.
- Segurança do tipo: Uma tabela hash armazena cada chave e valor como um objeto, enquanto um dicionário É genérico, portanto o compilador verifica os tipos que você usa.
- Domínio: Hashtable reside em System.Collections, enquanto Dictionary reside em System.Collections.Generic.
- Boxing: Uma Hashtable encapsula tipos de valor como int, mas um Dictionary genérico os armazena diretamente e evita esse custo.
- Desempenho: O dicionário geralmente é mais rápido porque não exige conversão de valor de objeto para dicionário ao ler um valor.
- Segurança da rosca: O Hashtable oferece o SyncWrapper cronizado para um escritor com muitos leitores, enquanto o código concorrente geralmente escolhe ConcurrentDictionary.
Para qualquer projeto novo, o dicionário genérico é a escolha recomendada, e a tabela hash não genérica aparece principalmente em códigos mais antigos.





