Erinevus HashMapi ja Java-vormingus hashtable'i vahel

Autor: Laura McKinney
Loomise Kuupäev: 2 Aprill 2021
Värskenduse Kuupäev: 5 Mai 2024
Anonim
Erinevus HashMapi ja Java-vormingus hashtable'i vahel - Tehnoloogia
Erinevus HashMapi ja Java-vormingus hashtable'i vahel - Tehnoloogia

Sisu


HashMap ja Hashtable, mõlemad on tähistatud objektide rühm mis on esindatud paar. Iga paari nimetatakse Sisenemine objekt. kollektsioon Kannete arvule viitavad objekt HashMap ja Hashtable. Kollektsiooni võtmed peavad olema unikaalsed või eristatavad. Erinevus HashMapi ja Hashtable'i vahel on see HashMap rakendab eriti kaardi liidest, samas kui Rõõmustav laiendab sõnaraamatu klassi (pärandklass), mis on ümber kujundatud Mapsi liidese rakendamiseks. Teine oluline erinevus on see, et HashMapi objektid on sünkroniseerimata arvestades, et Hashtable objektid on sünkroniseeritud.

Vaadakem allpool toodud võrdlustabelit, et saada veel mõned erinevused HashMapi ja Hashtable'i vahel.

  1. Võrdlusdiagramm
  2. Definitsioon
  3. Peamised erinevused
  4. Sarnasused
  5. Järeldus

Võrdlusdiagramm

Võrdluse alusHashMapHämmastav
Rakendage / laiendageHashMap klass rakendab Map liidest ja laiendab AbstractMap klassi.Hashtable laiendab Dictionary Legacy klassi, kuid see on ümber kujundatud ja nüüd rakendab see ka Mapsi liidest.
SünkroonimineHashMap on sünkroniseerimata ja seetõttu pole HashMap-i objekt keermestatud turvaliselt.Hashtable on sünkroonitud ja seetõttu on Hashtable objekt lõimekindel.
Klahvid / väärtusKlahv saab nulli tagastada ainult üks kord, kuid väärtus võib nulli tagastada suvalise aja jooksul.Võti ei saa nulli tagastada, kuna seda kasutatakse räsikoodi saamiseks, mida kasutatakse räsitabeli indeksina, samuti ei saa väärtus tagastada nulli.
Algne vaikemahtHashMapi algne vaikemaht on 16.Hashtable'i algne vaikemaht on 11.
LäbivadHashMapist saab mööda Iterator.Nagu Map klass, ei toeta ka Hashtable Iteraatorit otse liikumiseks ja seetõttu kasutab ta Enumeratorit.


Määratlus HashMap

HashMap on klass, mis rakendab Kaart liides ja laiendab AbstractMap klass kasutab räsitabelit. HashMapi objekt viitab kogumikule / komplektile paar, kus iga võti on kaardistatud kindla väärtusega. Kollektsiooni võtmed peavad olema kordumatud, kuna neid kasutatakse väärtuse leidmiseks. Teisest küljest saab kogu väärtusi dubleerida. HashMap klassi ja HashMapclassi konstruktorite deklaratsioon on järgmine:

/ * K tähistab võtit ja V tähistab väärtust * / klass HashMap / * Klassi HashMap konstruktorid * / HashMap () HashMap (kaart <? Laiendab K,? Laieneb V> m) HashMap (int mahutavus) HashMap (int mahutavus, float fillRatio)

Esimene konstruktor on vaikekonstruktor, mis initsialiseerib HashMapi tühja objekti vaikemisi mahtuvusega 16 ja täitmise suhtega 0,75. Teine konstruktor initsialiseerib räsikaardi väärtusega m. Kolmas konstruktor loob räsikaardi, mille algne maht vastab argumendis “maht” esitatud väärtusele. Neljas konstruktor lähtestab räsi kaardi parameetrites esitatud mahutavuse ja täitmissuhtega. andke meile nüüd teada, kuidas sisestusi räsikaardile sisestada.


Hashmap hm = uus Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * väljund * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordaania = 200}

Ülaltoodud koodi korral näete, et ma lõin tühja objekti HashMap hm algse algmahu ja vaikimisi täitmise suhtega. Seejärel lisasin räsikaardile neli sisestust, kasutades put (K, V) meetodit, mis kaardistab võtme väärtuse. Võite jälgida, et sisestusi ei redigeerita järjestuses, kus neid söödate, kuna sisestamise järjekord pole fikseeritud. Nüüd kaaluge juhtumit, kus teil on juba kanne räsikaardil ja pärast seda proovite sisestada put (K1, V5), st proovite kaardistada sama klahvi erineva väärtusega. Siis asendab müügimeetod vana väärtuse V1 uue väärtusega V2 ja tagastab vana väärtuse V1, vastasel juhul, kui me ei ürita kunagi võtme väärtust asendada, tagastab Put-meetod selle võtme jaoks väärtuse Null.

Määratlus Hashtable

Hashtable on klass, mis laiendab Sõnaraamat klass, mis on pärandklass ja mille ümberkujundamine toimub Kaart liides. Rämpspostitabel kasutab andmestruktuurina räsitabelit. Hashtable on sarnane HashMapiga, kuna ka siin tähistab Hashtable objekt kirjete kogumit, kus iga kirje on paar . Kõik kollektsiooni võtmed peavad olema kordumatud, väärtusi saab dubleerida. Klahve kasutatakse eriti räsikoodi väärtuse saamiseks, mis otsustab indeksi, kus paar salvestatakse räsitabelisse. Räsitabelis ei saa klahv ega väärtus tagastada kursorit Null. Vaatame hashtable klassi ja hashtable klassi konstruktorite deklaratsiooni.

/ * K täpsustab võtit ja V täpsustab võtmega * / class Hashtable seotud väärtuse / * Hashtable * / hashtable () hashtable (int size) hashtable (int size, float fillRatio) hashtable (kaart <? ulatub K,? laieneb V> m)

Ülalolevas koodis on esimene konstruktor vaikimisi kasutatav konstruktor, mis loob klassi Hashtable tühja objekti, selle vaikesuurus on 11 ja vaikese täitmise suhe 0,75. Teine konstruktor loob räsitabeli, mille suurus vastab parameetri „suurus” väärtusele. Kolmas konstruktor loob räsitabeli parameetris esitatud suuruse ja täitussuhtega. Neljas konstruktor lähtestab räsitabeli väärtusega m. Nüüd õppige, kuidas sisestada paar räsitabelis.

Hashtable ht = new hashtable (); ht.put (uus hashCode (2), 275); ht.put (uus hashCode (12), 250); ht.put (uus hashCode (16), 150); ht.put (uus hashCode (8), 200); System.out.ln (ht); / * väljund * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

Ülalolevas koodis lõin tühja objekti Hashtable ja lisasin neli sisestust, kasutades meetodit put (). Inside put meetodil kutsusin hashCode (), mis arvutab ja tagastab räsikoodi väärtuse, mis toimib sisestusobjekti indeksväärtusena. Nagu näete, ei maininud ma räsitabeli suurust, nii et vaikimisi on see 11. Siin ei säilitata ka sisestusjärjekorda ja seega, kui redigeeritud kirjed ei ilmunud jadas, söödeti.

  1. HashMap rakendab Kaart liides ja laiendab abstraktset klassi, AbstractMap arvestades, et Hashtable laiendab abstraktset klassi Sõnaraamat, mis on ühtlasi ka Legacy klass, mida hiljem hakati rakendama Kaart liides.
  2. Objekt HashMap on sünkroniseerimata st mitu lõime saab sellel samal ajal töötada ja seetõttu on see objektid, mis pole niidi suhtes ohutud. Teisest küljest on Hashtable objektid sünkroniseeritud st kui niit soovib töötada Hashtable objektil, peab ta omandama selle objekti lukustuse, nii et ükski teine ​​lõim sellele objektile juurde ei pääseks ja seega on see niitkindel.
  3. In HashMap võti võib naasta Ainult üks kordja väärtus võib naasta Null mitu korda. Teisest küljest ei saa võti kunagi nulli tagastada, kuna seda kasutati räsikoodi väärtuse saamiseks, mida kasutatakse indeksina paar ja ükski väärtus ei saa tagastada nulli.
  4. Räsitabeli vaikimisi maht HashMap klassis on 16 arvestades, et räsitabeli vaikesuurus jaotises Hashtable on 11.
  5. Iteraator saab Hashmap-i kirjetest mööda minna. Teisest küljest ei toeta Hashtable otseselt iteraatorit ja seega üldiselt Loendaja kasutatakse kirjete sirvimiseks jaotises Hashtable.

Sarnasused:

  • HashMap ja Hashtable kasutavad mõlemad räsilaud.
  • Mõlemad tööriistad HashMap ja Hashtable Kaart liides
  • Sisestusjärjestust ei säilitata nii HashMapis kui ka Hashtable'is ning põhineb klahvide abil saadud räsikoodil.
  • Rakendustes HashMap ja Hashtable peavad võtmed olema ainulaadne arvestades, et väärtused võivad olla dubleeritud.
  • Nii HashMap kui ka Hashtable võivad sisaldada heterogeensed objektid nii võtmete kui ka väärtuste jaoks.
  • Mõlemad tööriistad HashMap ja Hashtable Serialiseeritav ja Kloonitav liidesed aga mitte, juhuslik juurdepääs.
  • Nii HashMapil kui ka Hashtablel on vaikimisi täitmise suhe 0.75.
  • HashMap ja Hashtable on mõlemad parimad taastamiseks või otsimine operatsioonid.

Järeldus:

HashMap on jõudluses parem, kuna selle objektid pole sünkroniseeritud ja mitu lõime saavad sellel korraga töötada ning seega on see kiirem kui Hashtable.