HashMap ja Hashtable

Anonim

Java-kokoelmakehys sisältää joukon keräilyluokkia. Jokaisella luokalla on omat vahvuudet ja heikkoudet. Jotkut luokat tarjoavat täydellisiä toteutuksia, joita voidaan käyttää as-is. Toiset ovat abstrakteja, jotka tarjoavat luuston toteutuksia, joita käytetään lähtökohtina kokoelmien luomisessa. Kokoelman toteutukset käyttävät synkronoidun kääreen puitteita synkronoidun luokan luomiseksi, muuten toteutukset ovat synkronoituja. Useat luokat tarjoavat kartan käyttöliittymän toteutuksia.

Java-alustalla on kolme yleiskäyttöistä karttojen toteutusta: HashMap, TreeMap ja LinkedHashMap. HashMap ja Hashtable ovat kaksi Java-mallistoa, joita käytetään avain / arvo -parien tallentamiseen hash-taulukossa. Hashtable on synkronoitu kartta ja HashMap on epäsynkroninen kartta. Kuitenkin, jos haluat käyttää synkronoitua karttaa, Hashtable on nopeampi kuin käyttää HashMapia synkronoidussa kääreessä. Molemmat ovat hash-pohjaisia ​​kokoelmia Java, mutta heillä on heidän oikeudenmukainen osuus eroista. Korostamme joitain keskeisiä eroja näiden kahden välillä, jotta voimme ymmärtää termejä paremmin.

Mikä on HashMap?

HashMap on Map-toteutus, joka perustuu hash-taulukkoon, joka tarjoaa jatkuvaa suorituskykyä parien asettamiseen ja paikantamiseen. HashMap-luokka tarjoaa kartan toteutuksen, joka perustuu Hashtable-tietorakenteeseen. Tämä toteutus tukee kaikkia karttaoperaatioita ja sallii useita nolla-arvoja, mutta vain yhden nollaavaimen. Se käyttää avain / arvo -paria arvojen tallentamiseen hash-taulukkoon. Se on epäyhtenäinen kartta, mikä tarkoittaa sitä, ettei se ole kierrettä turvallinen eikä sitä voi jakaa useiden kierteiden välillä ilman asianmukaista synkronointia.

Mikä on Hashtable?

Toisin kuin HashMap, Hashtable on synkronoitu kartta ja se on säikeenkaltainen, mikä tarkoittaa sitä, että se voidaan jakaa useiden kierteiden kesken. Hashtableissa määrität objektin, jota voidaan käyttää avaimena ja arvo, joka kulkee avaimen kanssa. Hashtable-karttojen avaimet arvoihin hajautusfunktion avulla. Java tarjoaa tämän toiminnon objektin hashcode () -menetelmän muodossa, joka luokkiin ohittaa tarvittavat hash-koodit. Toisin kuin HashMap, Hashtable ei tue null-arvoja ja null-näppäimiä, koska Hashtable-menetelmän toteuttamismenetelmä on nolla.

Ero HashMapin ja Hashtablein välillä

  1. HashMap Vs. Hashtable

Molemmat ovat hash-pohjaisia ​​Java-kokoelmia, joita käytetään tietojen tallentamiseen avain / arvo-pareille. HashMap on Map-toteutus, joka perustuu hash-taulukkoon, joka tarjoaa jatkuvaa suorituskykyä parien asettamiseen ja paikantamiseen. Suorituskykyä voidaan säätää konstruktoreilla, joiden avulla voit määrittää hajautetun pöydän kapasiteetin ja kuormituskertoimen. Perus Hashtable on aivan samanlainen kuin HashMap, jopa alas menetelmän nimiä. Se tallentaa avain / arvo -parin hash-taulukkoon. Hashtableissa määrität objektin, jota voidaan käyttää avaimena ja arvo, joka kulkee avaimen kanssa.

  1. HashMap Vs. Hashtable

Sekä HashMap että Hashtable käyttävät hajautustekniikoita avainten perusteella. Kuten HashMap, Hashtable käyttää avain / arvo -paria arvojen tallentamiseen hash-taulukkoon. Näiden kahden tärkein ero on kuitenkin synkronointi. HashMap on epäyhtenäinen kartta, kun taas Hashtable on synkronoitu kartta. Tämä tarkoittaa sitä, että HashMap ei ole kierrettä turvallinen eikä sitä voi jakaa useiden kierteiden välillä ilman asianmukaista synkronointikoodia. Päinvastoin, Hashtable on kierteinen ja se voidaan jakaa useiden kierteiden välillä. Hashtable on nopeampi kuin käyttää HashMapia synkronoidussa kääreessä, jos haluat käyttää synkronoitua karttaa.

  1. Null-näppäimet ja nolla-arvot HashMap Vs. Hashtable

HashMap-luokka tarjoaa kartan toteutuksen, joka perustuu Hashtable-tietorakenteeseen. Tämä toteutus tukee kaikkia Map-toimintoja ja sallii useita nolla-arvoja, mutta vain yhden nollaavaimen, jotta se voisi säilyttää ainutlaatuiset avainominaisuudet. Se ei kuitenkaan takaa järjestystä, jossa merkinnät tallennetaan. Hashtable puolestaan ​​kartoittaa arvojen arvot hajautusfunktion avulla. Toisin kuin HashMap, Hashtable ei tue null-arvoja ja null-näppäimiä, koska Hashtable-menetelmän toteuttamismenetelmä on nolla.

  1. HashMap Vs. Hashtable

Koska HashMap ei ole synkronoitu kartta, se on paljon nopeampi ja parempi kuin suorituskykyä Hashtable, ja itse asiassa käyttää vähemmän muistia kuin Hashtable. Vaikka ne ovat lähes identtisiä, Hashtable on hieman hitaampi kuin HashMap, mutta nopeampi kuin synkronoitu HashMap. Luonnollisesti ei ole turvallista käyttää Hashtablea monisäikeisellä pääsyllä, koska vain menetelmät synkronoituvat. Hashtable on HashMapin synkronoitu vastine. Synkronoitavat objektit toimivat paremmin verrattuna synkronoitaviin kohteisiin kuten Hashtable toimii paremmin yhdellä kierteitetyllä ympäristössä.

HashMap vs. Hashtable: vertailukuvio

Yhteenveto HashMap Vs. Hashtable

HashMap-luokka antaa sinulle lajittelemattoman, järjestämättömän kartan. Joten kun tarvitset karttaa ja et välitä järjestystä, jossa merkinnät tallennetaan, niin HashMap on tapa edetä.

Hashtable, kuten Vector, on ollut esihistoriallisista Java-ajoista. Aivan kuten Vector on synkronoitu vastine nykyaikaisemmalle ja kehittyneemmälle ArrayListille, Hashtable on HashMapin synkronoitu vastine. Luokkaa ei kuitenkaan voida synkronoida, joten kun sanotaan, että Hashtable on synkronoitu kartta, se tarkoittaa, että luokan avainmenetelmät synkronoituvat.

Vaikka molemmat ovat lähes identtisiä, ero on siinä, miten ne synkronoituvat ja miten ne toimivat. HashMap toimii paremmin monisäikeisessä ympäristössä, kun taas Hashtable toimii paremmin yhteen kierteitetyssä ympäristössä.