Ero HashMap: n ja Java: n hashtable -sovellusten välillä

Kirjoittaja: Laura McKinney
Luomispäivä: 2 Huhtikuu 2021
Päivityspäivä: 5 Saattaa 2024
Anonim
Ero HashMap: n ja Java: n hashtable -sovellusten välillä - Tekniikka
Ero HashMap: n ja Java: n hashtable -sovellusten välillä - Tekniikka

Sisältö


HashMap ja Hashtable, molemmat ovat käytetty edustamaan esineiden ryhmä jotka ovat edustettuina pari. kukin paria kutsutaan merkintä esine. kokoelma Merkintöjä ohjaavat HashMap ja Hashtable. Kokoelman avainten on oltava ainutlaatuisia tai erottuvia. Ero HashMapin ja Hashtablen välillä on se HashMap toteuttaa etenkin karttarajapinnan, kun taas Hashtable laajentaa sanakirjaluokkaa (vanha luokka), joka on suunniteltu uudelleen toteuttamaan Karttarajapinta. Toinen tärkeä ero on, että HashMap-objektit ovat tahdistamattomissa taas Hashtablen esineet ovat synkronoitu.

Katsotaanpa alla olevaa vertailutaulua saadaksesi lisätietoja HashMapin ja Hashtablen eroista.

  1. Vertailutaulukko
  2. Määritelmä
  3. Keskeiset erot
  4. yhtäläisyyksiä
  5. johtopäätös

Vertailutaulukko

Vertailun perusteetHashMapHashtable
Toteuta / laajennaHashMap-luokka toteuttaa Kartta-käyttöliittymän ja laajentaa AbstractMap-luokkaa.Hashtable ulottuu Dictionary Legacy -luokan, mutta se on suunniteltu uudelleen ja nyt se toteuttaa myös Kartta-käyttöliittymän.
tahdistusHashMap ei ole synkronoitu, joten HashMap-objektia ei ole kierteitetty turvallisesti.Hashtable on synkronoitu, joten Hashtable-objekti on säiettä suojaava.
Avaimet / arvoAvain voi palauttaa nollan vain kerran, mutta arvo voi palauttaa nollaksi monta kertaa.Avain ei voi palauttaa nollaa, koska sitä käytetään hash-koodin hankkimiseksi, jota käytetään hash-taulukon indeksinä, eikä arvo voi palauttaa nollaa.
OletusarvoHashMapin oletusarvoinen alkuperäinen kapasiteetti on 16.Hashtablen oletusarvoinen alkuperäinen kapasiteetti on 11.
liikkumisestaIterator ohittaa HashMapin.Kuten Map-luokka, Hashtable ei myöskään tue suoraan Iteratoria liikkumiseen ja siten käyttää Enumeratoria.


Määritelmä HashMap

HashMap on luokka, joka toteuttaa Kartta käyttöliittymä ja laajentaa AbstractMap luokka käyttää hash-taulukkoa. HashMap-objekti viittaa kokoelmaan / joukkoon pari, jossa jokainen näppäin on kartoitettu tiettyyn arvoon. Kokoelman avainten on oltava ainutlaatuisia, koska niitä käytetään arvon hakemiseen. Toisaalta kokoelman arvot voidaan kopioida. HashMap-luokan ja HashMapclass-rakentajien ilmoitukset ovat seuraavat:

/ * K edustaa avainta ja V edustaa arvoa * / luokka HashMap / * HashMap-luokan rakentajat * / HashMap () HashMap (Kartta <? Laajentaa K,? Ulottuu V> m) HashMap (int kapasiteetti) HashMap (int kapasiteetti, float fillRatio)

Ensimmäinen rakentaja on oletuskonstruktori, joka alustaa HashMapin tyhjän objektin oletuskapasiteetilla 16 ja oletuksena täyttösuhteella 0,75. Toinen rakentaja alustaa hash-kartan arvolla m. Kolmas rakentaja luo hajautuskartan, jonka alkuperäinen kapasiteetti vastaa argumentin “kapasiteetti” annettua arvoa. Neljäs rakentaja alustaa hash-kartan kapasiteetilla ja täyttösuhteella, joka annetaan parametreissa. Opi nyt nyt syöttämään merkinnät hajakarttaan.


Hashmap hm = uusi Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * lähtö * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordania = 200}

Yllä olevassa koodissa voit nähdä, että olen luonut tyhjän HashMap-objektin hm oletusarvoisella alkuperäisellä kapasiteetilla ja täyttösuhteella Sitten lisäsin neljä merkintää hash-karttaan put (K, V) -menetelmällä, joka kuvaa avaimen arvoon. Voit huomata, että merkintöjä ei editoida niiden syöttämässä järjestyksessä, koska lisäysjärjestys ei ole kiinteä. Mieti nyt tapausta, jossa sinulla on jo merkintä hajakarttaan ja sen jälkeen yrität lisätä put (K1, V5), ts. yrität kartoittaa saman avaimen eri arvolla. Sitten put-menetelmä korvaa vanhan arvon V1 uudella arvolla V2 ja palauttaa vanhan arvon V1. Muussa tapauksessa, jos emme koskaan yritä korvata avaimen arvoa, put -menetelmä palauttaa avaimelle nollan.

Määritelmä Hashtable

Hashtable on luokka, joka laajentaa Sanakirja luokka, joka on perintöluokka ja joka on suunniteltu uudelleen toteuttamaan Kartta käyttöliittymä. Hashtable käyttää hash-taulukkoa sen tietorakenteena. Hashtable on samanlainen kuin HashMap, koska tässä myös Hashtable-objekti viittaa merkintöjen kokoelmaan, jossa jokainen merkintä on pari . Kaikkien kokoelman avainten on oltava toisaalta ainutlaatuisia, arvot voidaan kopioida. Näppäimiä käytetään erityisesti hajautuskoodiarvon saamiseen, joka päättää indeksin, missä pari tallennetaan hash-taulukkoon. Hajautustaulukossa ei avain eikä arvo voi palauttaa nollaosoitinta. Katsokaamme Hashtable-luokan julistus ja hashtable -luokan rakentajat.

/ * K määrittää avaimen ja V määrittää avaimeen * / luokan Hashtable liittyvän arvon / * Hashtable * / Hashtable () Hashtable (int-koko) Hashtable (int-koko, float fillRatio) Hashtable (Kartta <? ulottuu K,? ulottuu V> m)

Yllä olevassa koodissa ensimmäinen konstruktori on oletuskonstruktori, joka luo tyhjän objektin luokan Hashtable, sen oletuskoko on 11 ja oletuksena täyttösuhde on 0,75. Toinen rakentaja luo hash-taulukon, jonka koko vastaa parametrissa ”size” annettua arvoa. Kolmas rakentaja luo hash-taulukon, jonka koko ja täyttösuhde ovat parametrissa. Neljäs rakentaja alustaa hash-taulukon arvolla m. Opi nyt nyt kuinka pari hash-taulukossa.

Hashtable ht = uusi hashtable (); ht.put (uusi hashCode (2), 275); ht.put (uusi hash-koodi (12), 250); ht.put (uusi hash-koodi (16), 150); ht.put (uusi hashCode (8), 200); System.out.ln (ht); / * lähtö * / {12 = 250, 16 = 150,2 v = 275, 8 = 200}

Yllä olevaan koodiin luin tyhjän Hashtable-objektin ja lisäsin neljä merkintää put () -menetelmällä. Inside put -menetelmää kutsusin hashCode (), joka laskee ja palauttaa hash-koodin arvon, joka toimii hakemistoarvona tulo-ololle. Kuten näette, en maininnut hash-taulukon kokoa, joten oletuksena se on 11. Tässäkään lisäysjärjestystä ei säilytetä, ja siksi, kun ed-merkinnät eivät esiintyneet peräkkäin, se syötettiin.

  1. HashMap toteuttaa Kartta käyttöliittymä ja laajentaa abstraktia luokkaa, AbstractMap taas Hashtable laajentaa abstraktia luokkaa Sanakirja, joka on myös Legacy-luokka, suunniteltiin myöhemmin uudelleen käyttöön Kartta käyttöliittymä.
  2. HashMap-objekti on tahdistamattomissa ts. useita kierteitä voi toimia sillä samanaikaisesti, ja siten se ei ole lankoja turvallinen. Toisaalta Hashtablen esineet ovat synkronoitu ts. jos säie haluaa toimia Hashtable-objektissa, sen on hankittava lukko kyseiselle objektille, jotta mikään muu säie ei pääse kyseiseen esineeseen, ja siten se on säiettä turvallinen.
  3. HashMap-näppäimellä voi palata Vain kerran, ja arvo voi palata Ei koskaan useita kertoja. Toisaalta, avain ei voi koskaan palauttaa nollaa, koska se käytti hajautuskoodiarvon saamista, jota käytetään hakemistona tallentaaksesi pari, eikä arvo voi palauttaa nollaa.
  4. HashMap-luokan hash-taulukon oletuskapasiteetti on 16 taas hashtable-taulukon oletuskapasiteetti on 11.
  5. Iterator voi käydä läpi Hashmap-merkinnät. Toisaalta Hashtable ei tue suoraan iteraattoria ja siten yleensä Enumerator käytetään merkintöjen selaamiseen Hashtable-sovelluksessa.

yhtäläisyyksiä:

  • HashMap ja Hashtable käyttävät molemmat hash-pöytä.
  • HashMap ja Hashtable molemmat välineet Kartta käyttöliittymä
  • Lisäysjärjestys ei säily sekä HashMapissa että Hashtablessa ja perustuen avaimilla saatuun hash-koodiin.
  • Avaimien on oltava HashMapissa ja Hashtable -sovelluksissa ainutlaatuinen taas arvot voivat olla monistaa.
  • HashMap ja Hashtable voivat molemmat sisältää heterogeeniset esineet sekä näppäimille että arvoille.
  • HashMap ja Hashtable, molemmat työkalut sarjoittaa ja Cloneable rajapinnat, mutta ei, satunnainen pääsy.
  • HashMapilla ja Hashtablella on molemmat oletuksena täyttöaste 0.75.
  • HashMap ja Hashtable ovat molemmat parhaita haettaessa tai etsiminen toimintaa.

johtopäätös:

HashMap on suorituskykyä parempi, koska sen objektit ovat synkronoimattomia ja useat ketjut voivat toimia sillä samanaikaisesti, joten se on nopeampi kuin Hashtable.