Hashtable i Java forklaret med eksempler
Java Hashtable-klassen opretter en hashtabel ved at tilknytte nøgler til værdier. Den implementerer kortgrænsefladen og arver den fra klassen Ordbog.
Punkter at huske på
- En hashtabel er en listes array.
- Hver liste omtales som en bøtte.
- Hashcode()-teknikken bruges til at bestemme bøttens position.
- En hashtabel er en samling af værdier baseret på en nøgle.
- Hashtable-klassen i Java har forskellige dele.
- Klassen Hashtable i Java understøtter ikke null-nøgler eller -værdier.
- Hashtable-klassen i Java er blevet synkroniseret.
- Kapaciteten af Hashtable-klassen er 11 som standard, mens loadFactor er 0,75.
Erklæring af Hashtable-klassen
Lad os tage et kig på java.util.Hashtable-klassens erklæring.
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
Klasseparametre i en hashtabel
Lad os se på java.util.Hashtable-klassens parametre.
- Dette korts slags nøgler er angivet med bogstavet K.
- V:Det refererer til den tilknyttede værditype.
Hashtables interne funktioner
Nøgle/værdi-parrene er gemt i en hashbar datastruktur-array af buckets. HashCode()-metoden identificerer, hvilken bucket nøgle/værdi-kombinationen er knyttet til.
Hash-funktionen hjælper med at identificere en nøgles placering i bucket-listen. Hashcode er et ikke-negativt heltal, der er ens for ens objekter, men som måske er ens for ulige objekter generelt. Hashtabellen bruger equals()-metoden til at bestemme, om to elementer er ens.
To ulige objekter kan have den samme hashkode. Et sådant tilfælde betegnes som en kollision. Yderligere anvender en hashtabel en række lister til at løse kollisioner. De parringer, der er knyttet til en enkelt bucket (array-indeks), gemmes på en liste, og array-indekset indeholder en listereference.
Java Hashtable-klassekonstruktører
Hashtable()
Det bygger en tom hashtabel med den oprindelige kapacitet og belastningsfaktor sat til standard.
Hashtable(int kapacitet)
Det tager et heltal input og genererer en hash-tabel med en specifik initial kapacitet.
Hashtable(int kapacitet, float loadFactor)
Det bruges til at konstruere en hash-tabel med den indledende kapacitet og loadFactor, som du angiver.
Hashtable(Map udvider K,? udvider V> t)
Det bygger en ny hash-tabel med de samme tilknytninger som kortet.
Java Hashtable-klassemetoder
void clear()
Det bruges til at rydde hash-tabellens indhold.
Objekt klon()
Det returnerer en hashtabel, der kun er en overfladisk kopi af originalen.
V compute(K-tast, BiFunction super K,? super V,? udvider V> remappingFunction)
Det bruges til at oprette en kortlægning mellem en nøgle og dens aktuelle kortlagte værdi (eller null, hvis der ikke er nogen aktuel kortlægning).
V computeIfAbsent(K-tast, Funktion super K,? udvider V> mappingFunction)
Hvis den angivne nøgle ikke allerede er knyttet til en værdi (eller er afbildet til null), bruges den til at beregne dens værdi ved hjælp af den givne kortlægningsfunktion og indtaster den i dette kort, medmindre null.
V computeIfPresent(K-tast, BiFunction super K,? super V,? udvider V> remappingFunction)
Hvis værdien for den angivne nøgle er til stede og ikke er nul, bruges den til at oprette en ny mapping givet nøglen og dens eksisterende tilknyttede værdi.
Optællingselementer()
Det giver dig en opregning af hash-tabellens værdier.
Sæt> entrySet()
Det giver dig en fast visning af alle kortlægninger på kortet.
boolesk lig (Objekt o)
Det bruges til at sammenligne det leverede objekt og kortet.
void forEach(BiConsumer super K,? super V> handling)
Den udfører den angivne handling for hver kortpost, indtil alle poster er behandlet, eller handlingen udløser en undtagelse.
V getOrDefault(Objektnøgle, V defaultValue)
Det returnerer den værdi, som den leverede nøgle er tilknyttet til, eller standardværdi, hvis der ikke findes nogen tilknytning til nøglen i kortet.
int hashCode()
Det returnerer kortets hashkodeværdi.
Optælling nøgler()
Det returnerer en opregning af hashtabellens nøgler.
Indstil keySet()
Det giver dig et sæt visning af tasterne på kortet.
V-fletning(K-tast, V-værdi, BiFunction super V,? super V,? udvider V> remappingFunction)
Knytter den angivne nøgle til den ikke-nul-værdi, hvis den ikke allerede er knyttet til en værdi eller er null.
V put(K-tast, V-værdi)
Den tilføjer den leverede værdi til hash-tabellen med den angivne nøgle.
void putAll(Map forlænger K,? forlænger V> t))
Den kopierer hvert nøgleværdi-par fra kortet til hashtabellen.
V putIfAbsent(K-nøgle, V-værdi)
Hvis den angivne nøgle ikke allerede har en værdi (eller er knyttet til null), er den knyttet til den givne værdi og returnerer null; ellers returnerer den den aktuelle værdi.
boolesk fjern(Objektnøgle, Objektværdi)
Det rydder hashtabellen for de angivne værdier og deres relaterede nøgler.
V replace(K-tast, V-værdi)
Den erstatter den angivne værdi med en specificeret nøgle.
boolean replace(K key, V oldValue, V newValue)
En given nøgle erstatter den tidligere værdi med den nye.
void replaceAll(BiFunction super K,? super V,? udvider V>-funktionen)
Indtil alle poster er blevet behandlet, eller funktionen giver en fejl, erstatter den hver posts værdi med resultatet af at køre den angivne funktion på denne post.
String toString()
Det returnerer et Hashtable-objekts strengrepræsentation.
Samlingsværdier()
Det giver dig en samlingsvisning af alle værdierne på kortet.
boolesk indeholder(Objektværdi)
Hvis der findes en værdi svarende til værdien i hash-tabellen, returnerer denne metode sand; ellers returnerer den falsk.
boolean containsValue(Objektværdi)
Hvis værdien er lig med noget i hash-tabellen, returnerer denne metode sand; ellers returnerer den falsk.
boolean containsKey(Objektnøgle)
Hvis en nøgle med samme navn som nøglen findes i hash-tabellen, returnerer denne metode sand; ellers returnerer den falsk.
boolean isEmpty()
Hvis den tomme hash-tabel, returnerer denne metode sand; hvis den har mindst én nøgle, returnerer den falsk.
beskyttet void rehash()
Det bruges til at udvide hashtabellens størrelse og genhash alle dens nøgler.
V get(Objektnøgle)
Denne metode returnerer objektet, der indeholder nøglens tilsvarende værdi.
V remove(Objektnøgle)
Det bruges til at slippe af med nøglen og dens værdi. Værdien forbundet med nøglen returneres af denne metode.
int size()
Antallet af poster i hash-tabellen returneres af denne metode.
Brug af Hashtable til at udføre forskellige operationer
Tilføjelse af elementer
Put()-metoden tilføjer et element til hashtabellen. På den anden side holder hashtabellen ikke styr på indsættelsesrækkefølgen. Internt genereres hvert element med en anden hash, og elementerne indekseres baseret på denne hash for at forbedre effektiviteten.
// program for demonstrating how to add elements to a Hashtable in java import java.io.*; import java.util.*; class CodeAddElementsToHashtable { public static void main(String args[]) { // it is needles mentioning the generic type twice Hashtable<Integer, String> namesHashtable = new Hashtable<>(); // using Generics to initialize a Hashtable Hashtable<Integer, String> languagesHashtable = new Hashtable<Integer, String>(); // Inserting the Elements using the put() method namesHashtable.put(1, "Green"); namesHashtable.put(2, "Mike"); namesHashtable.put(3, "Bright"); languagesHashtable.put(1, "Java"); languagesHashtable.put(2, "Python"); languagesHashtable.put(3, "Kotlin"); // Print the mappings to the console System.out.println("Mappings of namesHashtable : " + namesHashtable); System.out.println("Mappings of languagesHashtable : " + languagesHashtable); } }
Ændring af elementer
Hvis vi vil ændre et element, efter at det er blevet tilføjet, kan vi gøre det ved at bruge put()-metoden til at tilføje det igen. Fordi nøglerne bruges til at indeksere elementerne i hashtabellen, kan vi ændre værdien af nøglen ved blot at indtaste den opdaterede værdi for den nøgle, vi vil ændre.
// program demonstrating how to update a Hashtable import java.io.*; import java.util.*; class CodeUpdatesOnHashtable { public static void main(String args[]) { // Hashtable Initialization Hashtable<Integer, String> namesHashtable = new Hashtable<Integer, String>(); // Engaging the put method to insert new elements namesHashtable.put(1, "Green"); namesHashtable.put(2, "Mike"); namesHashtable.put(3, "Bright"); // print the initial map to the console System.out.println("The Original Hashtable is: " + namesHashtable); // Update the value at the second key namesHashtable.put(3, "Martin"); // print the updated map System.out.println("The Updated Hashtable is: " + namesHashtable); } }
Fjern element
Metoden remove() fjerner et element fra kortet. Hvis en nøgle er til stede på kortet, tager denne metode nøgleværdien og fjerner tilknytningen for den pågældende nøgle fra kortet.
// program for demonstrating the removal of mappings from the Hashtable import java.io.*; import java.util.*; class CodeRemovingMappingsFromHashtable { public static void main(String args[]) { // Initialization of a Hashtable Map<Integer, String> namesHashtable = new Hashtable<Integer, String>(); // Engaging the put method to insert new elements namesHashtable.put(1, "Green"); namesHashtable.put(2, "Mike"); namesHashtable.put(3, "Bright"); // Initial namesHashtable System.out.println("The original namesHashtable is: " + namesHashtable); // Remove the map entry with key 4 namesHashtable.remove(3); // the final namesHashtable System.out.println("The resultant updated namesHashtable : " + namesHashtable); } }
Gå gennem en hashtabel
Vi kan bruge en forbedret for-løkke til at gentage tabellen. Gentagelse af en hashtabel er vist nedenfor.
// program for illustrating the traversal of Hashtable in Java import java.util.Hashtable; import java.util.Map; public class CodeIteratingHashtable { public static void main(String[] args) { // Create a Hashtable object. Hashtable<String, Integer> namesHashtable = new Hashtable<>(); // Using the put technique to add items namesHashtable.put("Green", 33); namesHashtable.put("Tyson", 16); namesHashtable.put("White", 67); // Using improved for loop iteration for (Map.Entry<String, Integer> e : namesHashtable.entrySet()) System.out.println(e.getKey() + " " + e.getValue()); } }
Eksempel:Java Hashtable
import java.util.*; class CodeHashtable{ public static void main(String args[]){ Hashtable<Integer,String> stringHashtable=new Hashtable<Integer,String>(); stringHashtable.put(1,"Bright"); stringHashtable.put(2,"Joy"); stringHashtable.put(3,"Esther"); stringHashtable.put(4,"Arnold"); for(Map.Entry myEntry:stringHashtable .entrySet()){ System.out.println(myEntry.getKey()+" "+myEntry .getValue()); } } }
Eksempel:Java Hashtables remove()-metode
import java.util.*; public class CodeHashtable { public static void main(String args[]) { Hashtable<Integer,String> nameHashtable=new Hashtable<Integer,String>(); nameHashtable.put(1,"Green"); nameHashtable.put(2,"Mike"); nameHashtable.put(3,"While"); nameHashtable.put(4,"Peter"); System.out.println("Hashtable before removal: "+ nameHashtable); // Remove value for key 4 nameHashtable.remove(4); System.out.println("Hashtable after removal: "+ nameHashtable); } }
Eksempel:Javas Hashtable getOrDefault()-metode
import java.util.*; class CodeHashtableGetOrDefault{ public static void main(String args[]){ Hashtable<Integer,String> nameHashtable=new Hashtable<Integer,String>(); nameHashtable.put(1,"Green"); nameHashtable.put(2,"Mike"); nameHashtable.put(3,"While"); nameHashtable.put(4,"Peter"); // As method arguments, we specify the if and else statements. System.out.println(nameHashtable .getOrDefault(2, "Not Found")); System.out.println(nameHashtable .getOrDefault(4, "Not Found")); } }
Eksempel:Javas hashtable putIfAbsent()
import java.util.*; class Hashtable4{ public static void main(String args[]){ Hashtable<Integer,String> nameHashtable=new Hashtable<Integer,String>(); nameHashtable.put(1,"Green"); nameHashtable.put(2,"Mike"); nameHashtable.put(3,"While"); nameHashtable.put(4,"Peter"); System.out.println("Initial nameHashtable : "+nameHashtable); //Because the specified pair is unique, it inserts. nameHashtable.putIfAbsent(2,"James"); System.out.println("Updated nameHashtable: "+nameHashtable); //Because the specified pair already exists, this method returns the current value. nameHashtable.putIfAbsent(4,"Tyson"); System.out.println("Updated nameHashtable: "+nameHashtable); } }
Eksempel:Javas hashtable:Website
import java.util.*; class CodeWebsite { int id; String site_name,site_author,site_owner; int site_links; public CodeWebsite(int id, String site_ame, String site_author, String site_owner, int site_links) { this.id = id; this.site_name = site_name; this.site_author = site_author; this.site_owner = site_owner; this.site_links = site_links; } } public class CodeHashtable { public static void main(String[] args) { //Creating map of Books Map<Integer,CodeWebsite> siteHashtable=new Hashtable<Integer,CodeWebsite>(); //Creating Books CodeWebsite siteOne=new CodeWebsite(1,"codeunderscored.com","Brown","CodeUnderscored",200); CodeWebsite siteTwo=new CodeWebsite(2,"Google.com","James","Google Inc.",200000); CodeWebsite siteThree=new CodeWebsite(3,"Facebook","Wiley","Meta",100000); //Adding CodeWebsite to siteHashtable siteHashtable.put(1,siteOne); siteHashtable.put(2,siteTwo); siteHashtable.put(3,siteThree); //Traversing the siteHashtable for(Map.Entry<Integer, CodeWebsite> entry:siteHashtable .entrySet()){ int key=entry.getKey(); CodeWebsite new_site=entry.getValue(); System.out.println(key+" Details:"); System.out.println(new_site .id+" "+new_site .site_name+" "+new_site .site_author+" "+new_site .site_owner+" "+new_site .site_links); } } }
Konklusion
En hash-tabel implementeres ved hjælp af klassen Hashtable, som kortlægger nøgler til værdier. Som en nøgle eller en værdi kan ethvert ikke-nul-objekt bruges. Objekterne, der bruges som nøgler, skal implementere hashCode og er lig med metoder til at gemme og hente objekter fra en hashtabel med succes.