what is java hashtable hashtable implementation example
Este tutorial explica o que é um Java HashTable, construtores e métodos de classe de Hashtable, implementação e Hashtable vs Hashmap:
O que é um HashTable?
Uma Hashtable em Java é uma matriz de elementos que são listas. Cada uma dessas listas é denominada como um balde .
Ele mapeia as chaves para os valores. Em Java, a tabela hash é implementada pela classe ‘HashTable’. Esta classe implementa a interface do mapa e herda a classe de dicionário.
=> Confira o guia de treinamento Java perfeito aqui.
Algumas das características exclusivas do Hashtable em Java são as seguintes:
- É uma matriz que contém listas ou baldes como seus elementos.
- Possui elementos únicos.
- Não há chave nula ou valor nulo na tabela de hash.
- É semelhante ao Hashmap, mas está sincronizado.
O que você aprenderá:
Classe HashTable em Java
Em Java, essa classe é membro do pacote java.util. Portanto, temos que incluir uma das seguintes instruções em nosso programa para incluir a funcionalidade da classe HashTable.
import java.util. *;
OU
import java.util.HashTable;
Uma declaração de classe geral para a classe java.util.HashTable é fornecida a seguir:
public class Hashtable extends Dictionary implements Map, Cloneable, Serializable
Aqui,
- K => tipo de chaves do HashTable
- V => tipo de valores mapeados
A API da classe HashTable consiste em construtores que são usados para construir os objetos da classe e as várias operações ou métodos que fazem parte da classe que proporcionam o funcionamento suave da classe HashTable.
Construtores da classe HashTable
Protótipo de Construtor | Descrição | |
---|---|---|
Definir | Definir | Ele retorna uma visualização definida dos mapeamentos contidos no mapa. |
Hashtable () | Construtor padrão: cria um objeto de classe HashTable com capacidade padrão inicial e fator de carga. | |
Hashtable (capacidade interna) | Cria uma tabela hash com a capacidade inicial especificada. | |
Hashtable (capacidade interna, float loadFactor) | Cria um objeto de tabela hash com a capacidade inicial = capacidade e fator de carga = loadFactor. | |
Hashtable (Map t) | Cria uma nova hashTable a partir do mapa fornecido, especificado como argumento. |
Métodos da classe HashTable
Método | Protótipo de Método | Descrição |
---|---|---|
Claro | void clear () | Limpa o HashTable redefinindo os valores. |
clone | Clone de objeto () | Faz uma cópia superficial do objeto HashTable e o retorna. |
calcular | V compute (chave K, BiFunction remappingFunction) | Calcula o mapeamento entre a chave fornecida e o valor usando a função de remapeamento. |
computeIfAbsent | V computeIfAbsent (tecla K, função de mapeamento de função) | Calcula o mapeamento entre a chave fornecida e o valor usando a função de remapeamento se a chave especificada ainda não estiver associada ao valor fornecido. |
computeIfPresent | V computeIfPresent (chave K, BiFunction remappingFunction) | Se a chave fornecida estiver presente, a função de remapeamento é usada para calcular um novo mapeamento entre a chave fornecida e o valor. |
elementos | Elementos de enumeração () | Ele retorna uma enumeração dos valores na tabela hash. |
é igual a | boolean equals (objeto o) | Compara o objeto fornecido com o HashTable. |
para cada | void forEach (ação BiConsumer) | A ação fornecida é executada para cada um dos elementos HashTable até que todos os elementos sejam esgotados. |
getOrDefault | V getOrDefault (chave do objeto, V defaultValue) | Ele retorna o valor para o qual a chave especificada está mapeada ou defaultValue se o mapa não contiver mapeamento para a chave. |
hashCode | int hashCode () | Retorna o código hash da HashTable. |
chaves | Chaves de enumeração () | Retorna chaves no HashTable como uma enumeração. |
conjunto de chaves | Definir keySet () | Retorna o conjunto de chaves (chaves como um conjunto) para o HashTable. |
vai | Mesclar V (tecla K, valor V, função de remapeamento BiFunction) | Mapeia a chave fornecida com o valor não nulo usando a função de remapeamento se a chave ainda não estiver presente ou nula. |
por | V put (chave K, valor V) | Insere um novo par de valores-chave na HashTable. |
Ponha tudo | void putAll (Map t)) | Coloca ou copia os pares de valores-chave do mapa fornecido para o HashTable. |
putIfAbsent | V putIfAbsent (chave K, valor V) | Associa a chave fornecida ao valor nulo se a chave ainda não estiver presente ou associada a nulo. |
retirar | boolean remove (chave do objeto, valor do objeto) | Exclui o par de valores-chave fornecido do HashTable. |
substituir | V substituir (chave K, valor V) | Ele substitui o valor da chave fornecida pelo valor especificado. |
substituir | boolean replace (chave K, V oldValue, V newValue) | Substitui o valor antigo da chave fornecida pelo novo valor. |
substitua tudo | void replaceAll (função BiFunction) | Todas as entradas no HashTable são substituídas pelo valor obtido da avaliação da função fornecida. |
para sequenciar | String toString () | Converte o objeto HashTable em sua representação de string. |
valores | Valores de coleção () | Retorna os valores no HashTable como uma coleção. |
contém | booleano contém (valor do objeto) | Verifica se o valor fornecido está presente no HashTable. Retorna verdadeiro se presente, senão retorna falso. |
contém valor | boolean containsValue (valor do objeto) | Verifica se existe um valor igual ao valor fornecido no HashTable e retorna verdadeiro. |
containsKey | boolean containsKey (chave do objeto) | Verifica se há alguma chave igual à chave fornecida no HashTable e retorna verdadeiro se sim. |
está vazia | boolean isEmpty () | Verifica se o HashTable fornecido está vazio e retorna verdadeiro se sim. |
refazer | protegido void rehash () | É usado para aumentar o tamanho da tabela de hash e refazer o hash de todas as suas chaves. |
obter | V get (chave do objeto) | Recupera o valor da chave fornecida. |
retirar | V remover (chave do objeto) | Exclui a chave e o valor fornecidos e retorna esse valor. |
Tamanho | tamanho interno () | Retorna o tamanho ou número de elementos presentes no HashTable. |
Implementação de HashTable
A seguir está a implementação da classe em Java. Aqui, demonstramos todos os métodos importantes fornecidos pela classe.
amplitude primeiro algoritmo de pesquisa c ++
import java.util.*; class Main{ public static void main(String args[]){ //create a Hashtable and initiliaze it Hashtable hash_tab=new Hashtable (); hash_tab.put(100,'Red'); hash_tab.put(101,'Green'); hash_tab.put(104,'Blue'); hash_tab.put(102,'Orange'); hash_tab.put(103,'Brown'); //obtain entrySet for the Hashtable and print the elments System.out.println('The contents of Hashtable:'); for(Map.Entry m:hash_tab.entrySet()){ System.out.println(m.getKey()+' : '+m.getValue()); } //getOrDefault operation => get the value at given key or output default message System.out.println('Hashtable Value at 101: ' + hash_tab.getOrDefault(101, 'Value Not Found')); System.out.println('Hashtable Value at 105: ' +hash_tab.getOrDefault(105, 'Value Not Found')); //remove operation => delete value at given key hash_tab.remove(102); System.out.println('After remove(102), the Hash Table: '+ hash_tab); //putIfAbsent operation=>update the key-value pair in table if absent hash_tab.putIfAbsent(102,'Orange'); System.out.println('Updated Hash Table: '+hash_tab); } }
Resultado:
O conteúdo do Hashtable:
104: Azul
103: Brown
102: laranja
101: Verde
100: Rede
Valor de Hashtable em 101: Verde
Valor Hashtable em 105: Valor não encontrado
Após remover (102), a Tabela de hash: {104 = Azul, 103 = Marrom, 101 = Verde, 100 = Vermelho}
Tabela de hash atualizada: {104 = Azul, 103 = Marrom, 102 = Laranja, 101 = Verde, 100 = Vermelho}
Exemplo de HashTable Java
Neste programa, definimos uma tabela de hash com as chaves como os nomes do titular da conta com seus respectivos saldos de conta como valores. Primeiro, recuperamos as chaves do HashTable como uma enumeração. Em seguida, usando essa enumeração, imprimimos os pares de valores-chave do HashTable.
Posteriormente, atualizamos o saldo da conta de um dos titulares e imprimimos o valor atualizado.
O programa abaixo mostra essa implementação.
import java.util.*; public class Main { public static void main(String args[]) { // Create a Hashtable of account balance Hashtable acc_balance = new Hashtable(); Enumeration person_names; String name_str; double balance; //initialize the Hashtable acc_balance.put('Lily', new Double(4367.34)); acc_balance.put('Ben', new Double(95.43)); acc_balance.put('Lacy', new Double(1200.00)); acc_balance.put('Dillon', new Double(499.22)); acc_balance.put('James', new Double(78.48)); // retrieve the keys of the Hashtable person_names = acc_balance.keys(); System.out.println('The account balance Hashtable:'); System.out.println(' KEY VALUE '); //print the contents of Hashtable while(person_names.hasMoreElements()) { name_str = (String) person_names.nextElement(); System.out.println(' ' + name_str + ' ' + acc_balance.get(name_str)); } System.out.println(); // Update Ben's Account by adding 1000 to it. balance = ((Double)acc_balance.get('Ben')).doubleValue(); acc_balance.put('Ben', new Double(balance + 1000)); //print the contents of updated account System.out.println('Ben's new Account balance: ' + acc_balance.get('Ben')); } }
Resultado:
O Hashtable do saldo da conta:
VALOR CHAVE
James 78,48
Ben 95,43
Dillon 499,22
Lily 4367,34
Lacy 1200.0
Novo saldo da conta de Ben: 1095,43
Hashtable x Hashmap
HashTable | HashMap |
---|---|
HashTable é lento para executar. | HashMap é mais rápido. |
Herda a classe de dicionário. | Herda a classe AbstractMap. |
É uma classe legada. | Classe HashMap introduzida no JDK 1.2 |
Sincronizado e thread-safe. | Não sincronizado e sem thread-safe. |
É sincronizado internamente e não pode ser desfeito. | Ele pode ser sincronizado usando o método Collections.synchronizedMap. |
Nenhuma chave / valor nulo permitido. | Permite chave nula e vários valores nulos. |
Pode ser percorrido usando Enumerator e Iterator. | Pode ser percorrido apenas usando Iterator. |
perguntas frequentes
P # 1) O que é Hashtable em Java?
Responda: É uma classe legada que herda a classe “dicionário” e armazena pares chave-valor.
Q # 2) Por que o Hashtable é usado?
Responda: Ele é usado para armazenar pares de valores-chave. Então, quando precisamos armazenar os pares de valores-chave no formato tabular, vamos para HashTable. Em segundo lugar, ele pode armazenar vários valores para a mesma chave usando baldes. A recuperação de dados é eficiente em HashTables.
Q # 3)Como você cria um Hashtable em Java?
Responda: Você pode criá-lo instanciando um objeto da classe java.util.HashTable.
HashTable hashTable = new HashTable();
A instrução acima cria um HashTable denominado ‘hashTable’ com chaves e valores do tipo String.
Q # 4) O Hashtable é seguro para thread?
Responda: Sim, é seguro para threads. Caso a segurança do thread não seja necessária, podemos optar pelo HashMap.
Q # 5) Como Hashtable funciona internamente em Java com um exemplo?
Responda: Internamente, ele armazena pares de valores-chave em uma estrutura chamada baldes. A posição do balde é determinada pelo hashCode da chave. A função hash obtém a localização do intervalo usando o hashCode da chave.
Conclusão
HashTable consiste em dados armazenados na forma de pares de valores-chave. As chaves ou valores não podem ser nulos. Em Java, ele é implementado usando a classe HashTable.
Vimos os construtores e métodos fornecidos pela classe HashTable junto com a implementação de HashTable na linguagem Java.
Em nosso próximo tutorial, discutiremos a coleção HashMap.
quantas empresas de segurança cibernética existem
=> Visite aqui a série exclusiva de tutoriais de treinamento em Java.
Leitura recomendada
- Tutorial de reflexão Java com exemplos
- Tutorial de classe de scanner Java com exemplos
- Java Basics: Java Syntax, Java Class e Core Java Concepts
- O que é Java Vector | Tutorial da classe Java Vector com exemplos
- Tutorial Java SWING: Container, Componentes e Manipulação de Eventos
- Tutorial da classe Java Array - classe java.util.Arrays com exemplos
- Tutorial de JAVA para iniciantes: mais de 100 tutoriais práticos em vídeo Java
- Java String contains () Tutorial de método com exemplos