Java >> Java tutorial >  >> Java

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 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 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 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 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 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 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 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-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.


Java tag