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.





