Razlika između HashMap-a i Hashtable-a u Javi

Autor: Laura McKinney
Datum Stvaranja: 2 Travanj 2021
Datum Ažuriranja: 5 Svibanj 2024
Anonim
Pitanja na testiranju za JAVA programiranje praksu
Video: Pitanja na testiranju za JAVA programiranje praksu

Sadržaj


Oba HashMap i Hashtable koriste se za predstavljanje a skupina objekata koji su zastupljeni u par. Svaki par se zove ulaz objekt. kolekcija unosa se navode objektima HashMap i Hashtable. Ključevi u zbirci moraju biti jedinstveni ili prepoznatljivi. Razlika između HashMap-a i Hashtable-a je u tome HashMap posebno implementira Map sučelje, a, Hashtable proširuje klasu Rječnika (naslijeđena klasa) koja je reinženjerirana za implementaciju Map sučelja. Druga važna razlika je da su objekti HashMap-a unsynchronized dok su predmeti Hashtable-a sinkronizirano.

Pogledajmo usporedni grafikon prikazan u nastavku kako bismo saznali još neke razlike između HashMap-a i Hashtable-a.

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. sličnosti
  5. Zaključak

Usporedni grafikon

Osnove za usporedbuHashMapHashtable
Provesti / produžitiHashMap klasa implementira sučelje Map i proširuje klasu AbstractMap.Hashtable proširuje razred Legacy Class, ali, on je redizajniran i sada također implementira Map sučelje.
SinkronizacijaHashMap je nesinkroniziran, te stoga HashMap objekt nije siguran u navoj.Hashtable je sinkroniziran, pa je stoga predmet Hashtable-a siguran na niti.
Tipke / vrijednostKljuč može vratiti Null samo jednom, ali vrijednost može vratiti Null bilo koji broj vremena.Ključ ne može vratiti Null jer se koristi za dobivanje hash koda koji će se koristiti kao indeks hash tablice, niti vrijednost može vratiti Null.
Zadani početni kapacitetZadani početni kapacitet HashMap-a je 16.Zadani početni kapacitet Hashtable-a je 11.
poprijekoHashMap prelazi Iterator.Kao i klasa Map Hashtable, također izravno ne podržava Iterator za putovanje, pa koristi Enumerator.


Definicija HashMap-a

HashMap je klasa koja implementira Karta sučelje i proširuje AbstractMap klasa koristi tablicu hash-a. Objekt HashMap odnosi se na kolekciju / skup par u kojem se svaki ključ preslikava na određenu vrijednost. Tipke u zbirci moraju biti jedinstvene jer se koriste za dohvaćanje vrijednosti. S druge strane, vrijednosti u zbirci mogu se duplicirati. Deklaracija o HashMap klasi i konstruktorima HashMapclass-a je sljedeća:

/ * K predstavlja ključ, a V predstavlja vrijednost * / klase HashMap / * Konstruktori klase HashMap * / HashMap () HashMap (Map <? Proširuje K,? Proširuje V> m) HashMap (int kapacitet) HashMap (int kapacitet, float fillRatio)

Prvi konstruktor je zadani konstruktor koji inicijalizira prazan objekt HashMap-a sa zadanim kapacitetom 16 i zadanim omjerom ispunjavanja 0,75. Drugi konstruktor inicijalizira hash mapu sa vrijednošću m. Treći konstruktor stvara hash mapu s početnim kapacitetom koji odgovara vrijednosti navedenoj u argumentu "kapacitet". Četvrti konstruktor inicijalizira hash map s kapacitetom i omjerom punjenja navedenim u parametrima. doznajmo sada kako hraniti unose u hash mapi.


Hashmap hm = novi Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * izlaz * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}

U gornjem kôdu možete vidjeti da sam stvorio prazan HashMap objekt hm sa zadanim početnim kapacitetom i zadanim omjerom punjenja. Zatim sam umetnuo četiri unosa u hash kartu koristeći put (K, V) metodu koja ključ preslikava na vrijednost. Možete primijetiti da unosi nisu uređeni u redoslijedu u kojem ih hranite jer redoslijed umetanja nije fiksiran. Sada razmislite o slučaju da već imate unos u hash kartu i nakon toga pokušavate umetnuti put (K1, V5), tj. pokušavate preslikati isti ključ s različitom vrijednošću. Tada će metoda put zamijeniti staru vrijednost V1 novom vrijednošću V2 i vratiti staru vrijednost V1, inače, ako nikada ne pokušamo zamijeniti vrijednost ključa, tada metoda stavlja Null za taj ključ.

Definicija Hashtable-a

Hashtable je klasa koja proširuje Rječnik klase koja je naslijeđena klasa i reinženjerirana je za implementaciju Karta sučelje. Hashtable koristi hash tablicu kao svoju strukturu podataka. Hashtable je sličan HashMap-u, jer se ovdje objekt Hashtable odnosi na zbirku unosa u kojima je svaki unos par , S druge strane, svi ključevi u zbirci moraju biti jedinstveni, vrijednosti se mogu duplicirati. Tipke se posebno koriste za dobivanje vrijednosti hash koda koja određuje indeks, gdje je par će biti pohranjen u hash tablici. U tablici hash-a niti ključ niti vrijednost ne mogu vratiti Null pointer. Pogledajmo deklaraciju klase Hashtable i konstruktore klase hashtable.

/ * K određuje ključ, a V određuje vrijednost koja je povezana s ključem * / klasa Hashtable / * konstruktori Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? extends K,? extends V> m)

U gornjem kôdu, prvi konstruktor je zadani konstruktor koji stvara prazan objekt klase Hashtable, njegova zadana veličina je 11, a zadani omjer ispunjavanja 0,75. Drugi konstruktor stvara tablicu hash-a s veličinom koja odgovara vrijednosti navedenoj u parametru "size". Treći konstruktor stvara tablicu hash-a s veličinom i omjerom ispunjavanja navedenim u parametru. Četvrti konstruktor inicijalizira hash tablicu sa vrijednošću m. Naučimo sada kako umetnuti uparite u tablici hash-a.

Hashtable ht = novi Hashtable (); ht.put (novi hashCode (2), 275); ht.put (novi hashCode (12), 250); ht.put (novi hashCode (16), 150); ht.put (novi hashCode (8), 200); System.out.ln (ht); / * izlaz * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

U gornjem kôdu stvorio sam prazan objekt Hashtable i umetnuo četiri unosa pomoću metode put (). Unutar put metoda nazvao sam hashCode () koji izračunava i vraća hash vrijednost koda koja će djelovati kao vrijednost indeksa za objekt unosa. Kao što vidite, nisam spomenuo veličinu hash tablice, pa će prema zadanim postavkama biti 11. Ovdje također redoslijed umetanja nije sačuvan i, prema tome, kada se unosi ed ne pojavljuju u redoslijedu u kojem je postavljen.

  1. HashMap provodi Karta sučelje i proširuje apstraktnu klasu, AbstractMap dok Hashtable proširuje apstraktnu klasu Rječnik, koja je ujedno i Legacy klasa, kasnije renovirana za implementaciju Karta sučelje.
  2. Objekt HashMap je unsynchronized tj. više niti može istodobno raditi na njemu, pa stoga i objekti nisu niti sigurni. S druge strane, predmeti su Hashtable-a sinkronizirano tj. ako nit želi raditi na objektu Hashtable, on mora steći bravu na tom objektu, tako da nijedna druga nit ne bi mogla pristupiti tom objektu, i stoga je on siguran.
  3. U HashMap ključu se može vratiti Ništa samo jednom, a vrijednost se može vratiti Ništa više puta, S druge strane, ključ nikada ne može vratiti Null kao nekada za dobivanje vrijednosti hash koda koji se koristi kao indeks za pohranjivanje par i niti vrijednost mogu vratiti Null.
  4. Zadani kapacitet tablice hash u klasi HashMap je 16 budući da je zadani kapacitet hash tablice u Hashtable-u 11.
  5. iterator može prelaziti unose Hashmapa. S druge strane, Hashtable izravno ne podržava iteratora, a time i općenito popisivač koristi se za prelistavanje unosa u Hashtable-u.

sličnosti:

  • Oba HashMap i Hashtable koriste strukturu podataka hash table.
  • HashMap i Hashtable oba alata Karta sučelje
  • Redoslijed umetanja nije sačuvan u HashMap-u i Hashtable-u i na temelju hash koda dobivenog pomoću ključeva.
  • U HashMap-u i Hashtable-u moraju biti Ključevi jedinstvena dok vrijednosti mogu biti dvostruki.
  • HashMap i Hashtable oboje mogu sadržavati heterogeni predmeti i za ključeve i za vrijednosti.
  • HashMap i Hashtable, obje implementacije serializable i Cloneable sučelja ali ne, slučajni pristup.
  • Oba HashMap i Hashtable imaju zadani omjer ispunjavanja 0.75.
  • Oba su HashMap i Hashtable najbolji za pretraživanje ili pretraživanje operacije.

Zaključak:

HashMap je bolji u performansama jer su njegovi objekti nesinhronizirani i na njemu može raditi više niti istovremeno, pa je i brži od Hashtable-a.