what is java hashtable hashtable implementation example
Questo tutorial spiega cos'è una tabella hash Java, costruttori e metodi di classe Hashtable, implementazione e hashtable vs hashmap:
Cos'è una tabella hash?
Un hashtable in Java è un array di elementi che sono elenchi. Ciascuno di questi elenchi è definito come un file secchio .
Mappa le chiavi dei valori. In Java, la tabella hash è implementata dalla classe 'HashTable'. Questa classe implementa l'interfaccia della mappa ed eredita la classe del dizionario.
=> Dai un'occhiata alla guida di formazione Java perfetta qui.
Alcune delle caratteristiche uniche di Hashtable in Java sono le seguenti:
- È un array che contiene elenchi o bucket come elementi.
- Ha elementi unici.
- Non è presente alcuna chiave o valore null in Hashtable.
- È simile a Hashmap ma è sincronizzato.
Cosa imparerai:
Classe HashTable in Java
In Java, questa classe è un membro del pacchetto java.util. Quindi dobbiamo includere una delle seguenti istruzioni nel nostro programma per includere la funzionalità della classe HashTable.
import java.util. *;
O
import java.util.HashTable;
Di seguito viene fornita una dichiarazione di classe generale per la classe java.util.HashTable:
public class Hashtable extends Dictionary implements Map, Cloneable, Serializable
Qui,
- K => tipo di chiavi della tabella hash
- V => tipo di valori mappati
L'API della classe HashTable è costituita da costruttori che vengono utilizzati per costruire gli oggetti della classe e le varie operazioni o metodi che fanno parte della classe, il che determina il buon funzionamento della classe HashTable.
Costruttori della classe HashTable
Prototipo del costruttore | Descrizione | |
---|---|---|
Impostato | Impostato | Restituisce una vista impostata delle mappature contenute nella mappa. |
Hashtable () | Costruttore predefinito: crea un oggetto classe HashTable con capacità e fattore di carico predefiniti iniziali. | |
Hashtable (capacità interna) | Crea una tabella hash con la capacità iniziale specificata. | |
Hashtable (capacità int, float loadFactor) | Crea un oggetto tabella hash con capacità iniziale = capacità e fattore di carico = fattore di carico. | |
Hashtable (Mappa t) | Crea una nuova hashTable dalla mappa specificata come argomento. |
Metodi della classe HashTable
Metodo | Metodo Prototipo | Descrizione |
---|---|---|
chiaro | void clear () | Cancella l'HashTable reimpostando i valori. |
clone | Oggetto clone () | Crea una copia superficiale dell'oggetto HashTable e la restituisce. |
calcolare | Calcolo V (tasto K, funzione di rimappatura BiFunction) | Calcola la mappatura tra la chiave data e il valore utilizzando la funzione di rimappatura. |
computeIfAbsent | V computeIfAbsent (tasto K, Function mappingFunction) | Calcola la mappatura tra la chiave data e il valore utilizzando la funzione di rimappatura se la chiave specificata non è già associata al valore dato. |
computeIfPresent | V computeIfPresent (tasto K, BiFunction remappingFunction) | Se la chiave data è presente, la funzione di rimappatura viene utilizzata per calcolare una nuova mappatura tra la chiave data e il valore. |
elementi | Elementi di enumerazione () | Restituisce un'enumerazione dei valori nella tabella hash. |
è uguale a | booleano è uguale a (Oggetto o) | Confronta l'oggetto specificato con HashTable. |
per ciascuno | void forEach (azione BiConsumer) | L'azione specificata viene eseguita per ciascuno degli elementi HashTable fino a quando tutti gli elementi non sono esauriti. |
getOrDefault | V getOrDefault (Object key, V defaultValue) | Restituisce il valore a cui è mappata la chiave specificata o defaultValue se la mappa non contiene alcuna mappatura per la chiave. |
codice hash | int hashCode () | Restituisce il codice hash di HashTable. |
chiavi | Chiavi di enumerazione () | Restituisce le chiavi in HashTable come enumerazione. |
mazzo di chiavi | Imposta keySet () | Restituisce il keyset (keys come set) per HashTable. |
partire | Unione V (tasto K, valore V, funzione di rimappatura BiFunction) | Mappa la chiave data con il valore non nullo utilizzando la funzione di rimappatura se la chiave non è già presente o nullo. |
mettere | V put (tasto K, valore V) | Inserisce una nuova coppia chiave-valore nella tabella hash. |
metti tutto | void putAll (Mappa t)) | Inserisce o copia le coppie chiave-valore della mappa data nella tabella hash. |
putIfAbsent | V putIfAbsent (tasto K, valore V) | Associa la chiave specificata al valore null se la chiave non è già presente o associata a null. |
rimuovere | booleano remove (chiave oggetto, valore oggetto) | Elimina la coppia chiave-valore specificata da HashTable. |
sostituire | V sostituire (tasto K, valore V) | Sostituisce il valore della chiave data con il valore specificato. |
sostituire | sostituzione booleana (K key, V oldValue, V newValue) | Sostituisce il vecchio valore della chiave data con il nuovo valore. |
sostituisci tutto | void replaceAll (funzione BiFunction) | Tutte le voci nella tabella hash vengono sostituite dal valore ottenuto dalla valutazione della funzione data. |
accordare | String toString () | Converte l'oggetto HashTable nella sua rappresentazione di stringa. |
valori | Valori di raccolta () | Restituisce i valori in HashTable come raccolta. |
contiene | booleano contiene (valore oggetto) | Controlla se il valore specificato è presente nella tabella hash. Restituisce vero se presente altrimenti restituisce falso. |
contiene valore | boolean containsValue (valore oggetto) | Controlla se è presente un valore uguale al valore specificato nella tabella hash e restituisce true. |
contieneKey | booleano containsKey (chiave oggetto) | Controlla se c'è una chiave uguale alla chiave specificata nella tabella hash e restituisce true se sì. |
è vuoto | booleano isEmpty () | Verifica se la tabella hash data è vuota e restituisce true in caso affermativo. |
rimaneggiamento | protetto void rehash () | Viene utilizzato per aumentare la dimensione della tabella hash e ripete tutte le sue chiavi. |
ottenere | V get (Object key) | Recupera il valore per la chiave specificata. |
rimuovere | V remove (Object key) | Elimina la chiave e il valore specificati e restituisce questo valore. |
taglia | int size () | Restituisce la dimensione o il numero di elementi presenti nella tabella hash. |
Implementazione di HashTable
Di seguito è riportata l'implementazione della classe in Java. Qui abbiamo dimostrato tutti i metodi importanti forniti dalla classe.
come aprire un file jnlp
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); } }
Produzione:
I contenuti di Hashtable:
104: blu
103: marrone
102: arancione
101: verde
100: rete
Valore hashtable a 101: verde
Valore hashtable a 105: valore non trovato
Dopo la rimozione (102), la tabella hash: {104 = blu, 103 = marrone, 101 = verde, 100 = rosso}
Tabella hash aggiornata: {104 = blu, 103 = marrone, 102 = arancione, 101 = verde, 100 = rosso}
HashTable Java Esempio
In questo programma, definiamo una tabella hash con le chiavi come nomi del titolare del conto con i rispettivi saldi dei conti come valori. Innanzitutto, recuperiamo le chiavi da HashTable come enumerazione. Quindi, utilizzando questa enumerazione, stampiamo le coppie chiave-valore dalla tabella Hash.
Successivamente, aggiorniamo il saldo del conto di uno dei titolari e stampiamo l'importo aggiornato.
Il programma fornito di seguito mostra questa implementazione.
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')); } }
Produzione:
Il saldo del conto Hashtable:
VALORE CHIAVE
Giacomo 78.48
Ben 95.43
Dillon 499.22
Lily 4367.34
Lacy 1200.0
Nuovo saldo del conto di Ben: 1095.43
Hashtable Vs Hashmap
HashTable | HashMap |
---|---|
HashTable è lento da eseguire. | HashMap è più veloce. |
Eredita la classe del dizionario. | Eredita la classe AbstractMap. |
È una classe legacy. | Classe HashMap introdotta in JDK 1.2 |
Sincronizzato e thread-safe. | Non sincronizzato e non thread-safe. |
È sincronizzato internamente e non può essere annullato. | Può essere sincronizzato utilizzando il metodo Collections.synchronizedMap. |
Nessuna chiave / valore nullo consentito. | Consente chiave null e più valori null. |
Può essere attraversato utilizzando Enumerator e Iterator. | Può essere attraversato solo utilizzando Iterator. |
Domande frequenti
D # 1) Cos'è Hashtable in Java?
Risposta: È una classe legacy che eredita la classe 'dizionario' e memorizza le coppie chiave-valore.
Q # 2) Perché viene utilizzato Hashtable?
Risposta: Viene utilizzato per memorizzare coppie chiave-valore. Quindi, quando abbiamo bisogno di memorizzare le coppie chiave-valore nel formato tabulare, andiamo per HashTable. In secondo luogo, può memorizzare più valori per la stessa chiave utilizzando i bucket. Il recupero dei dati è efficiente in HashTables.
Q # 3)Come si crea un Hashtable in Java?
Risposta: Puoi crearlo istanziando un oggetto della classe java.util.HashTable.
HashTable hashTable = new HashTable();
L'istruzione precedente crea una tabella hash denominata 'hashTable' con chiavi e valori di tipo String.
Q # 4) Hashtable è thread-safe?
Risposta: Sì, è thread-safe. Nel caso in cui non sia richiesta la sicurezza del thread, possiamo optare per HashMap.
Q # 5) Come funziona Hashtable internamente in Java con un esempio?
Risposta: Internamente memorizza le coppie chiave-valore in una struttura chiamata bucket. La posizione del bucket è determinata dall'hashCode della chiave. La funzione hash ottiene la posizione del bucket utilizzando hashCode della chiave.
Conclusione
HashTable è costituito da dati archiviati sotto forma di coppie chiave-valore. Le chiavi o i valori non possono essere nulli. In Java, è implementato utilizzando la classe HashTable.
Abbiamo visto i costruttori e i metodi forniti dalla classe HashTable insieme all'implementazione di HashTable in linguaggio Java.
Nel nostro prossimo tutorial, discuteremo della raccolta di HashMap.
test end-to-end vs test di regressione
=> Visita qui per l'esclusiva serie di tutorial di formazione Java.
Lettura consigliata
- Tutorial Java Reflection con esempi
- Tutorial di classe per scanner Java con esempi
- Nozioni di base su Java: sintassi Java, classe Java e concetti principali di Java
- Cos'è Java Vector | Tutorial Java Vector Class con esempi
- Tutorial Java SWING: contenitore, componenti e gestione degli eventi
- Tutorial Java Array Class - classe java.util.Arrays con esempi
- Tutorial JAVA per principianti: oltre 100 tutorial video Java pratici
- Tutorial sul metodo Java String contains () con esempi