logo

Hashtable Javassa

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

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.

Hashtable törmäys

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:

  1. 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.
  2. Helppokäyttöinen: Hashtable-luokka on helppokäyttöinen ja tarjoaa perusavainarvotietorakenteen toiminnallisuuden, josta voi olla hyötyä yksinkertaisissa tapauksissa.

Hashtablen haitat:

  1. 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.
  2. Rajoitettu toiminnallisuus: Hashtable-luokka tarjoaa perusavainarvotietorakenteen toiminnallisuuden, mutta ei tarjoa kaikkia toimintoja, jotka ovat saatavilla Map-rajapinnassa ja sen toteutuksissa.
  3. 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:

  1. Maurice Naftalinin ja Philip Wadlerin Java-kokoelmat. Tämä kirja tarjoaa kattavan yleiskatsauksen Java Collections -kehyksestä, mukaan lukien Hashtable-luokasta.
  2. Java pähkinänkuoressa David Flanagan. Tämä kirja tarjoaa nopean viittauksen Javan ydinominaisuuksiin, mukaan lukien Hashtable-luokka.
  3. 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