The Hashtable luokka toteuttaa hash-taulukon, joka kartoittaa avaimet arvoihin. Mitä tahansa ei-null-objektia voidaan käyttää avaimena tai arvona. Objektien tallentaminen ja hakeminen hashtableista onnistuneesti edellyttää, että avaimina käytettävien objektien tulee toteuttaa hashCode- ja equals-metodi.
Luokka java.util.Hashtable on Java-luokka, joka tarjoaa avainarvotietorakenteen, joka on samanlainen kuin Map-käyttöliittymä. Se oli osa alkuperäistä Java Collections -kehystä ja otettiin käyttöön Java 1.0:ssa.
Hashtable-luokkaa on kuitenkin sittemmin pidetty vanhentuneena, ja sen käyttöä ei yleensä suositella. Tämä johtuu siitä, että se on suunniteltu ennen Collections-kehyksen käyttöönottoa, eikä se toteuta Map-käyttöliittymää, mikä vaikeuttaa sen käyttöä yhdessä muiden kehyksen osien kanssa. Lisäksi Hashtable-luokka on synkronoitu, mikä voi johtaa hitaampaan suorituskykyyn verrattuna muihin Map-käyttöliittymän toteutuksiin.
Yleensä on suositeltavaa käyttää Map-käyttöliittymää tai jotakin sen toteutuksista (kuten HashMap tai ConcurrentHashMap) Hashtable-luokan sijaan.
Tässä on esimerkki Hashtable-luokan käytöstä:
Java
kartta vs
import> java.util.Enumeration;> import> java.util.Hashtable;> public> class> Main {> >public> static> void> main(String[] args) {> >Hashtable hashtable =>new> Hashtable();> >// Adding elements to the hashtable> >hashtable.put(>'A'>,>1>);> >hashtable.put(>'B'>,>2>);> >hashtable.put(>'C'>,>3>);> >// Getting values from the hashtable> >int> valueA = hashtable.get(>'A'>);> >System.out.println(>'Value of A: '> + valueA);> >// Removing elements from the hashtable> >hashtable.remove(>'B'>);> >// Enumerating the elements of the hashtable> >Enumeration keys = hashtable.keys();> >while> (keys.hasMoreElements()) {> >String key = keys.nextElement();> >System.out.println(>'Key: '> + key +>', Value: '> + hashtable.get(key));> >}> >}> }> |
>
>Lähtö
Value of A: 1 Key: A, Value: 1 Key: C, Value: 3>
Yhteenvetona voidaan todeta, että vaikka Hashtable-luokka on edelleen olemassa Javassa ja sitä voidaan edelleen käyttää, on yleensä suositeltavaa käyttää sen sijaan Map-käyttöliittymää tai jotakin sen toteutuksista.
Hashtablen ominaisuudet
- Se on samanlainen kuin HashMap, mutta on synkronoitu.
- Hashtable tallentaa avain/arvo-parin hash-taulukkoon.
- Hashtableissa määritämme objektin, jota käytetään avaimena, ja arvon, jonka haluamme liittää kyseiseen avaimeen. Sitten avain tiivistetään, ja tuloksena olevaa hash-koodia käytetään indeksinä, johon arvo tallennetaan taulukkoon.
- Hashtable-luokan alkuperäinen oletuskapasiteetti on 11, kun taas loadFactor on 0,75.
- HashMap ei tarjoa luetteloa, kun taas Hashtable ei tarjoa nopeaa luettelointia.
Ilmoitus:
public class Hashtable extends Dictionary implements Map, Cloneable, Serializable>
Tyyppiparametrit:
- K – tämän kartan ylläpitämien avainten tyyppi
- SISÄÄN – kartoitettujen arvojen tyyppi
Hashtablen hierarkia

Hashtable-työkalut Sarjasoitavissa , Kloonattavissa , Kartta rajapintoja ja laajenee Sanakirja . Suorat alaluokat ovat Properties, UID-oletukset .
Rakentajat:
Hashtablen luomiseksi meidän on tuotava se kohteesta java.util.Hashtable . Hashtable voidaan luoda monella eri tavalla.
1. Hashtable(): Tämä luo tyhjän hash-taulukon, jonka oletuslatauskerroin on 0,75 ja alkukapasiteetti on 11.
Hashtable ht = new Hashtable();
Java
// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Hashtable ht1 =>new> Hashtable();> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable();> >// Inserting the Elements> >// using put() method> >ht1.put(>1>,>'one'>);> >ht1.put(>2>,>'two'>);> >ht1.put(>3>,>'three'>);> >ht2.put(>4>,>'four'>);> >ht2.put(>5>,>'five'>);> >ht2.put(>6>,>'six'>);> >// Print mappings to the console> >System.out.println(>'Mappings of ht1 : '> + ht1);> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }> |
>
>Lähtö
Mappings of ht1 : {3=three, 2=two, 1=one} Mappings of ht2 : {6=six, 5=five, 4=four}> 2. Hashtable (int alkuperäinen kapasiteetti): Tämä luo hajautustaulukon, jonka alkuperäinen koko on määrittänyt inicialCapacity ja oletuslatauskerroin on 0,75.
Hashtable ht = new Hashtable(int alkuperäinen kapasiteetti);
Java
// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Hashtable ht1 =>new> Hashtable(>4>);> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable(>2>);> >// Inserting the Elements> >// using put() method> >ht1.put(>1>,>'one'>);> >ht1.put(>2>,>'two'>);> >ht1.put(>3>,>'three'>);> >ht2.put(>4>,>'four'>);> >ht2.put(>5>,>'five'>);> >ht2.put(>6>,>'six'>);> >// Print mappings to the console> >System.out.println(>'Mappings of ht1 : '> + ht1);> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }> |
>
>Lähtö
Mappings of ht1 : {3=three, 2=two, 1=one} Mappings of ht2 : {4=four, 6=six, 5=five}> 3. Hashtable (sisäisen koko, kelluntatäyttösuhde): Tämä versio luo hash-taulukon, jonka alkuperäinen koko on määritetty fillRatio-määritteen koon ja täyttösuhteen mukaan. täyttösuhde: Pohjimmiltaan se määrittää, kuinka täynnä hash-taulukko voi olla ennen kuin sen kokoa muutetaan ylöspäin ja sen arvo on välillä 0,0 - 1,0.
Hashtable ht = new Hashtable(int size, float fillRatio);
Java
avaa asetusvalikko
// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Hashtable ht1> >=>new> Hashtable(>4>,>0>.75f);> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable(>3>,>0>.5f);> >// Inserting the Elements> >// using put() method> >ht1.put(>1>,>'one'>);> >ht1.put(>2>,>'two'>);> >ht1.put(>3>,>'three'>);> >ht2.put(>4>,>'four'>);> >ht2.put(>5>,>'five'>);> >ht2.put(>6>,>'six'>);> >// Print mappings to the console> >System.out.println(>'Mappings of ht1 : '> + ht1);> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }> |
>
>Lähtö
Mappings of ht1 : {3=three, 2=two, 1=one} Mappings of ht2 : {6=six, 5=five, 4=four}> 4. Hashtable (kartta m): Tämä luo hajautustaulukon, joka alustetaan m:n elementeillä.
Hashtable ht = uusi Hashtable(Kartta m);
Java
// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Map hm =>new> HashMap();> >// Inserting the Elements> >// using put() method> >hm.put(>1>,>'one'>);> >hm.put(>2>,>'two'>);> >hm.put(>3>,>'three'>);> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable(hm);> >// Print mappings to the console> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }> |
>
>Lähtö
Mappings of ht2 : {3=three, 2=two, 1=one}> Esimerkki:
Java
// Java program to illustrate> // Java.util.Hashtable> import> java.util.*;> public> class> GFG {> >public> static> void> main(String[] args)> >{> >// Create an empty Hashtable> >Hashtable ht =>new> Hashtable();> >// Add elements to the hashtable> >ht.put(>'vishal'>,>10>);> >ht.put(>'sachin'>,>30>);> >ht.put(>'vaibhav'>,>20>);> >// Print size and content> >System.out.println(>'Size of map is:- '> + ht.size());> >System.out.println(ht);> >// Check if a key is present and if> >// present, print value> >if> (ht.containsKey(>'vishal'>)) {> >Integer a = ht.get(>'vishal'>);> >System.out.println(>'value for key'> >+>' 'vishal' is:- '> + a);> >}> >}> }> |
>
>Lähtö
Size of map is:- 3 {vaibhav=20, vishal=10, sachin=30} value for key 'vishal' is:- 10> Erilaisten toimintojen suorittaminen Hashtablella
1. Elementtien lisääminen: Elementin lisäämiseksi hashtable-taulukkoon voimme käyttää put()-menetelmää. Lisäysjärjestys ei kuitenkaan säily hash-taulukossa. Sisäisesti jokaiselle elementille luodaan erillinen tiiviste ja elementit indeksoidaan tämän tiivisteen perusteella sen tehostamiseksi.
Java
// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Hashtable ht1 =>new> Hashtable();> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable();> >// Inserting the Elements> >// using put() method> >ht1.put(>1>,>'Geeks'>);> >ht1.put(>2>,>'For'>);> >ht1.put(>3>,>'Geeks'>);> >ht2.put(>1>,>'Geeks'>);> >ht2.put(>2>,>'For'>);> >ht2.put(>3>,>'Geeks'>);> > >// Print mappings to the console> >System.out.println(>'Mappings of ht1 : '> + ht1);> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }> |
konekirjoitussarja
>
>Lähtö
Mappings of ht1 : {3=Geeks, 2=For, 1=Geeks} Mappings of ht2 : {3=Geeks, 2=For, 1=Geeks}> 2. Elementtien muuttaminen: Kun elementit on lisätty, jos haluamme muuttaa elementtiä, se voidaan tehdä lisäämällä elementti uudelleen put()-metodilla. Koska hash-taulukon elementit indeksoidaan avaimilla, avaimen arvoa voidaan muuttaa yksinkertaisesti lisäämällä päivitetty arvo avaimelle, jota haluamme muuttaa.
Java
// Java program to demonstrate> // updating Hashtable> import> java.io.*;> import> java.util.*;> class> UpdatesOnHashtable {> >public> static> void> main(String args[])> >{> >// Initialization of a Hashtable> >Hashtable ht> >=>new> Hashtable();> >// Inserting the Elements> >// using put method> >ht.put(>1>,>'Geeks'>);> >ht.put(>2>,>'Geeks'>);> >ht.put(>3>,>'Geeks'>);> > >// print initial map to the console> >System.out.println(>'Initial Map '> + ht);> > >// Update the value at key 2> >ht.put(>2>,>'For'>);> > >// print the updated map> >System.out.println(>'Updated Map '> + ht);> >}> }> |
>
>Lähtö
Initial Map {3=Geeks, 2=Geeks, 1=Geeks} Updated Map {3=Geeks, 2=For, 1=Geeks}> 3. Elementin poistaminen: Elementin poistamiseksi kartasta voimme käyttää Remove()-menetelmää. Tämä menetelmä ottaa avaimen arvon ja poistaa avaimen kartoituksen tästä kartasta, jos se on kartalla.
Java
// Java program to demonstrate> // the removing mappings from Hashtable> import> java.io.*;> import> java.util.*;> class> RemovingMappingsFromHashtable {> >public> static> void> main(String args[])> >{> >// Initialization of a Hashtable> >Map ht> >=>new> Hashtable();> >// Inserting the Elements> >// using put method> >ht.put(>1>,>'Geeks'>);> >ht.put(>2>,>'For'>);> >ht.put(>3>,>'Geeks'>);> >ht.put(>4>,>'For'>);> >// Initial HashMap> >System.out.println(>'Initial map : '> + ht);> >// Remove the map entry with key 4> >ht.remove(>4>);> >// Final Hashtable> >System.out.println(>'Updated map : '> + ht);> >}> }> |
>
>Lähtö
Initial map : {4=For, 3=Geeks, 2=For, 1=Geeks} Updated map : {3=Geeks, 2=For, 1=Geeks}> 4. Hashtablen läpikäynti: Taulukon iteroimiseksi voimme käyttää an edistynyt silmukalle . Alla on esimerkki hash-taulukon iteroinnista.
Java
// Java program to illustrate> // traversal of Hashtable> import> java.util.Hashtable;> import> java.util.Map;> public> class> IteratingHashtable {> >public> static> void> main(String[] args)> >{> >// Create an instance of Hashtable> >Hashtable ht =>new> Hashtable();> >// Adding elements using put method> >ht.put(>'vishal'>,>10>);> >ht.put(>'sachin'>,>30>);> >ht.put(>'vaibhav'>,>20>);> > >// Iterating using enhanced for loop> >for> (Map.Entry e : ht.entrySet())> >System.out.println(e.getKey() +>' '> >+ e.getValue());> >}> }> |
>
>Lähtö
vaibhav 20 vishal 10 sachin 30>
Hashtablen sisäinen toiminta
Hashtable-tietorakenne on joukko segmenttejä, jotka tallentavat avain/arvo-parit niihin. Se hyödyntää hashCode() -menetelmä määrittääksesi, mikä ryhmä avain/arvo-parin tulee yhdistää.
Hajautustoiminto auttaa määrittämään tietyn avaimen sijainnin ämpäriluettelossa. Yleensä hashcode on ei-negatiivinen kokonaisluku, joka on yhtä suuri samansuuruisille objekteille ja voi olla tai ei ole sama eriarvoisille objekteille. Hashtable käyttää equals()-menetelmää määrittääkseen, ovatko kaksi objektia samanarvoisia vai eivät.
On mahdollista, että kahdella eri objektilla on sama hash-koodi. Tätä kutsutaan a törmäys . Hashtable käyttää törmäysten ratkaisemiseen joukkoa luetteloita. Parit, jotka on kartoitettu yhteen segmenttiin (taulukkoindeksi), tallennetaan luetteloon ja luetteloviittaukset tallennetaan taulukkoindeksiin.

Hashtablen menetelmät
- K – Kartan avainten tyyppi.
- SISÄÄN – Karttaan kartoitettujen arvojen tyyppi.
| MENETELMÄ | KUVAUS esimerkkejä binääripuista |
|---|---|
| asia selvä() | Tyhjentää tämän hashtablen niin, ettei se sisällä avaimia. |
| klooni() | Luo matalan kopion tästä hash-taulukosta. |
| compute(K-näppäin, BiFunction K,? Super V,? laajentaa V> remapping Function) | Yrittää laskea vastaavuuden määritetylle avaimelle ja sen nykyiselle yhdistetylle arvolle (tai nolla, jos nykyistä kartoitusta ei ole). |
| computeIfAbsent(K-näppäin, funktio laajentaa V> mappingFunction) | Jos määritettyä avainta ei ole jo liitetty arvoon (tai se on kuvattu nollaan), yrittää laskea sen arvon käyttämällä annettua kuvausfunktiota ja syöttää sen tähän karttaan, ellei se ole nolla. |
| computeIfPresent(K-näppäin, BiFunction-uudelleenkuvausfunktio) | Jos määritetyn avaimen arvo on läsnä ja ei ole nolla, yrittää laskea uuden kuvauksen avaimella ja sen nykyisellä kuvatulla arvolla. |
| sisältää (objektin arvo) | Testaa, osuuko jokin avain määritettyyn arvoon tässä hash-taulukossa. |
| sisältääKey(Objektiavain) | Testaa, onko määritetty objekti avain tässä hash-taulukossa. |
| sisältääValue(objektin arvo) | Palauttaa tosi, jos tämä hashtable yhdistää yhden tai useamman avaimen tähän arvoon. |
| elementit() | Palauttaa tämän hash-taulukon arvojen luettelon. |
| entrySet() | Palauttaa sarjanäkymän tämän kartan sisältämistä kartoituksista. |
| yhtä suuri (objekti o) | Vertaa määritettyä objektia tähän karttaan tasa-arvoisuuden vuoksi karttaliittymän määritelmän mukaisesti. |
| get (Objektiavain) | Palauttaa arvon, johon määritetty avain on kartoitettu, tai nollan, jos tämä kartta ei sisällä määritystä avaimelle. |
| hash koodin() | Palauttaa tämän kartan hash-koodin arvon karttaliittymän määritelmän mukaisesti. |
| on tyhjä() | Testaa, yhdistäkö tämä hashtable arvoihin avaimia. |
| avaimet () | Palauttaa luettelon tämän hash-taulukon avaimista. |
| keySet() | Palauttaa tämän kartan sisältämien avainten sarjanäkymän. |
| yhdistä (K-avain, V-arvo, BiFunction-uudelleenkuvaustoiminto) | Jos määritettyä avainta ei ole jo liitetty arvoon tai se on liitetty tyhjään, liittää sen annettuun ei-nolla-arvoon. |
| put(K-avain, V-arvo) | Yhdistää määritetyn avaimen määritettyyn arvoon tässä hash-taulukossa. |
| laita kaikki (kartta t) | Kopioi kaikki määritetyn kartan kartoitukset tähän hash-taulukkoon. |
| rehash() | Lisää tämän hash-taulukon kapasiteettia ja organisoi sen sisäisesti uudelleen, jotta sen merkintöjä voidaan mukauttaa ja käyttää tehokkaammin. |
| poista(Objektiavain) | Poistaa avaimen (ja sitä vastaavan arvon) tästä hash-taulukosta. |
| koko() | Palauttaa avainten määrän tässä hash-taulukossa. |
| toString() | Palauttaa tämän Hashtable-objektin merkkijonoesityksen merkintöjen muodossa, jotka on suljettu aaltosulkeilla ja erotettu ASCII-merkeillä , (pilkku ja välilyönti). |
| arvot() | Palauttaa kokoelmanäkymän tämän kartan sisältämistä arvoista. |
Käyttöliittymässä java.util.Map ilmoitetut menetelmät
| MENETELMÄ | KUVAUS |
|---|---|
| forEach (kaksikuluttajan toiminta) | Suorittaa annetun toiminnon jokaiselle tämän kartan merkinnälle, kunnes kaikki merkinnät on käsitelty tai toiminto tekee poikkeuksen. |
| getOrDefault(Objektiavain, V oletusarvo) | Palauttaa arvon, johon määritetty avain on yhdistetty, tai oletusarvon, jos tämä kartta ei sisällä avaimen määritystä. |
| putIfAbsent(K-avain, V-arvo) | Jos määritettyä avainta ei ole jo liitetty arvoon (tai se on kuvattu nollaan), liittää sen annettuun arvoon ja palauttaa nollan, muussa tapauksessa palauttaa nykyisen arvon. |
| poista(Objektiavain, Objektin arvo) | Poistaa määritetyn avaimen merkinnän vain, jos se on tällä hetkellä yhdistetty määritettyyn arvoon. |
| korvaa (K-avain, V-arvo) | Korvaa määritetyn avaimen merkinnän vain, jos se on tällä hetkellä yhdistetty johonkin arvoon. |
| korvaa (K avain, V vanha arvo, V uusi arvo) | Korvaa määritetyn avaimen merkinnän vain, jos se on tällä hetkellä yhdistetty määritettyyn arvoon. |
| korvaa kaikki (BiFunction-toiminto) | Korvaa jokaisen merkinnän arvon tuloksella, joka kutsuu kyseisessä merkinnässä annetun funktion, kunnes kaikki merkinnät on käsitelty tai funktio tekee poikkeuksen. |
Täytyy lukea:
- Erot HashMapin ja HashTablen välillä Javassa
Hashtablen edut:
- Säieturvallinen: Hashtable-luokka on säikeen turvallinen, mikä tarkoittaa, että useat säikeet voivat käyttää sitä samanaikaisesti aiheuttamatta tietojen vioittumista tai muita synkronointiongelmia.
- Helppokäyttöinen: Hashtable-luokka on helppokäyttöinen ja tarjoaa perusavainarvotietorakenteen toiminnallisuuden, josta voi olla hyötyä yksinkertaisissa tapauksissa.
Hashtablen haitat:
- Vanhentunut: Hashtable-luokkaa pidetään vanhentuneena, ja sen käyttöä ei yleensä suositella. Tämä johtuu siitä, että se on suunniteltu ennen Collections-kehyksen käyttöönottoa, eikä se toteuta Map-käyttöliittymää, mikä vaikeuttaa sen käyttöä yhdessä muiden kehyksen osien kanssa.
- Rajoitettu toiminnallisuus: Hashtable-luokka tarjoaa perusavainarvotietorakenteen toiminnallisuuden, mutta ei tarjoa kaikkia toimintoja, jotka ovat saatavilla Map-rajapinnassa ja sen toteutuksissa.
- Huono suorituskyky: Hashtable-luokka on synkronoitu, mikä voi johtaa hitaampaan suorituskykyyn verrattuna muihin Map-käyttöliittymän toteutuksiin, kuten HashMap tai ConcurrentHashMap.
Lähdekirjat:
- Maurice Naftalinin ja Philip Wadlerin Java-kokoelmat. Tämä kirja tarjoaa kattavan yleiskatsauksen Java Collections -kehyksestä, mukaan lukien Hashtable-luokasta.
- Java pähkinänkuoressa David Flanagan. Tämä kirja tarjoaa nopean viittauksen Javan ydinominaisuuksiin, mukaan lukien Hashtable-luokka.
- Maurice Naftalinin ja Philip Wadlerin Java Generics and Collections. Tämä kirja tarjoaa kattavan oppaan geneerisiin tuotteisiin ja kokoelmiin Javassa, mukaan lukien Hashtable-luokka.
Viite: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Hashtable.html