Ero HashMap ja Hashtable välillä

Java-kokoelmat tarjoavat joukon kokoelmaluokkia. Jokaisella luokalla on omat suorituskykynsä vahvuudet ja heikkoudet. Jotkut luokista tarjoavat täydet toteutukset, joita voidaan käyttää sellaisenaan. Toiset ovat abstrakteja, jotka tarjoavat luurankototeutuksia, joita käytetään lähtökohtana kokoelmien luomiseen. Kokoelman toteutukset käyttävät synkronoidun käärejärjestelmän synkronoituja luokkia, muuten toteutukset ovat synkronoimattomia. Useat luokat tarjoavat karttarajapinnan toteutuksia.

Java-alusta sisältää kolme yleiskäyttöistä Map-toteutusta: HashMap, TreeMap ja LinkedHashMap. HashMap ja Hashtable ovat kaksi Java-kokoelmaa, joita käytetään avain- / arvoparien tallentamiseen hash-taulukkoon. Hashtable on synkronoitu kartta ja HashMap on synkronoimaton kartta. Siitä huolimatta, että joudut käyttämään synkronoitua karttaa, Hashtable on nopeampi kuin HashMapin käyttö synkronoidussa kääressä. Molemmat ovat hash-pohjaisia ​​kokoelmia Javassa, mutta niillä on kohtuullinen osuus eroista. Korostamme joitain keskeisiä eroja näiden kahden välillä auttaaksemme sinua ymmärtämään termejä paremmin.

Mikä on HashMap?

HashMap on hash-taulukkoon perustuva Map-toteutus, joka tarjoaa jatkuvan suorituskyvyn parien lisäämiseen ja paikantamiseen. HashMap-luokka tarjoaa karttatoteutuksen, joka perustuu Hashtable-tietorakenteeseen. Tämä toteutus tukee kaikkia Kartta-operaatioita ja sallii useita nolliarvoja, mutta vain yhden nolla-avaimen. Se käyttää avain- / arvopareja arvojen tallentamiseen hash-taulukkoon. Se on synkronoimaton kartta, joka tarkoittaa, että se ei ole langansuojattu eikä sitä voida jakaa useiden ketjujen välillä ilman asianmukaista synkronointia.

Mikä on haastavaa?

Toisin kuin HashMap, Hashtable on synkronoitu kartta ja se on langaton, mikä tarkoittaa, että se voidaan jakaa useiden ketjujen kesken. Kohdassa Hashtable voit määrittää objektin, jota voidaan käyttää avaimena, ja arvon, joka avaimen mukana tulee. Hashtable kuvaa avaimet arvoihin hash-toiminnon avulla. Java tarjoaa tämän toiminnon Object hashcode () -menetelmän muodossa, joka luokki ohittaa tarjoamaan sopivia hash-koodeja. Toisin kuin HashMap, Hashtable ei tue nolla-arvoja ja nolla-avaimia, koska Hashtable -sovelluksen toteuttamisessa on nollakontrolli.

Ero HashMap ja Hashtable välillä

  1. HashMap Vs: n perusteet Hashtable

Molemmat ovat Java-hash-pohjaisia ​​kokoelmia, joita käytetään tietojen tallentamiseen avain- / arvopareihin. HashMap on hash-taulukkoon perustuva Map-toteutus, joka tarjoaa jatkuvan suorituskyvyn parien lisäämiseen ja paikantamiseen. Suorituskykyä voidaan säätää konstruktoreilla, joiden avulla voit asettaa hash-taulukon kapasiteetin ja kuormituskertoimen. Perus Hashtable on melko samanlainen kuin HashMap, jopa menetelmänimissä. Se tallentaa avain / arvo-parin hash-taulukkoon. Kohdassa Hashtable voit määrittää objektin, jota voidaan käyttää avaimena, ja arvon, joka avaimen mukana tulee.

  1. HashMap Vs: n synkronointi Hashtable

Sekä HashMap että Hashtable käyttävät hajautustekniikoita arvojen tallentamiseksi avaimen perusteella. Kuten HashMap, myös Hashtable käyttää avain- / arvopareja arvojen tallentamiseen hash-taulukkoon. Näiden kahden avainero on kuitenkin synkronointi. HashMap on synkronoimaton kartta, kun taas Hashtable on synkronoitu kartta. Tämä tarkoittaa, että HashMap ei ole langansuojattu eikä sitä voida jakaa useiden ketjujen välillä ilman asianmukaista synkronointikoodia. Päinvastoin, Hashtable on langaton ja se voidaan jakaa useiden ketjujen kesken. Hashtable on nopeampaa kuin HashMapin käyttö synkronoidussa kääreessä, jos joudut käyttämään synkronoitua karttaa.

  1. HashMap Vs: n nolla-avaimet ja nolla-arvot Hashtable

HashMap-luokka tarjoaa karttatoteutuksen, joka perustuu Hashtable-tietorakenteeseen. Tämä toteutus tukee kaikkia Kartta-operaatioita ja sallii useita nolliarvoja, mutta vain yhden nolla-avaimen, jotta se voisi ylläpitää ainutlaatuisia avainominaisuuksia. Se ei kuitenkaan takaa merkintöjen tallennusjärjestystä. Hashtable puolestaan ​​kartoittaa avaimet arvoihin hash-toiminnon avulla. Toisin kuin HashMap, Hashtable ei tue nolla-arvoja ja nolla-avaimia, koska Hashtable -sovelluksen toteuttamisessa on nollakontrolli.

  1. HashMap Vs: n suorituskyky Hashtable

Koska HashMap ei ole synkronoitu kartta, se on suorituskyvyn suhteen paljon nopeampi ja parempi kuin Hashtable, ja käyttää itse asiassa vähemmän muistia kuin Hashtable. Vaikka Hashtable ovat käytännössä identtisiä, se on hiukan hitaampi kuin HashMap, mutta nopeampi kuin synkronoitu HashMap. Luonnostaan ​​ei ole turvallista käyttää Hashtablea monisäikeisen pääsyn kanssa, koska vain menetelmät synkronoidaan. Hashtable on synkronoitu vastine HashMap: lle. Synkronoimattomat objektit toimivat paremmin verrattuna synkronoituihin objekteihin, kuten Hashtable toimii paremmin yhdessä kierteitetyssä ympäristössä.

HashMap vs. Hashtable: vertailukaavio

 

Yhteenveto HashMap Vs. Hashtable

HashMap-luokka antaa sinulle lajittelemattoman, järjestämättömän kartan. Joten kun tarvitset karttaa etkä välitä merkintöjen tallennusjärjestyksestä, niin HashMap on tie.

Hashtable, aivan kuten Vector, on ollut mukana esihistoriallisista Java-ajoista lähtien. Aivan kuten Vector on synkronoitu vastine nykyaikaisempaan ja edistyneempaan ArrayListiin, myös Hashtable on synkronoitu vastine HashMapille. Luokkaa ei kuitenkaan voida synkronoida, joten kun sanomme, että Hashtable on synkronoitu kartta, se tarkoittaa, että luokan tärkeimmät menetelmät synkronoidaan. 

Vaikka molemmat ovat käytännössä identtisiä, ero on siinä, miten ne synkronoidaan ja miten ne toimivat. HashMap toimii paremmin monisäikeisessä ympäristössä, kun taas Hashtable toimii paremmin yhdessä kierteitetyssä ympäristössä.