Forskjellen mellom HashMap og Hashtable i Java

Forfatter: Laura McKinney
Opprettelsesdato: 2 April 2021
Oppdater Dato: 5 Kan 2024
Anonim
14.11 HashMap and HashTable in Java
Video: 14.11 HashMap and HashTable in Java

Innhold


HashMap og Hashtable, begge brukes til å representere en gruppe av objekter som er representert i par. Hver par heter Inngang gjenstand. De samling av oppføringer blir henvist til av objektet HashMap og Hashtable. Nøkler i en samling må være unike eller særegne. Forskjellen mellom HashMap og Hashtable er det HashMap implementerer spesielt kartgrensesnittet, mens hashtabellen utvider ordbokklassen (legacy class) som reengineerered for å implementere kartgrensesnittet. Den andre viktige forskjellen er at objekter fra HashMap er usynkroniserte mens gjenstandene til Hashtable er synkronisert.

La oss se på sammenligningstabellen nedenfor for å lære flere forskjeller mellom HashMap og Hashtable.

  1. Sammenligningstabell
  2. Definisjon
  3. Viktige forskjeller
  4. likheter
  5. Konklusjon

Sammenligningstabell

Grunnlag for sammenligningHashMaphashtabellen
Implementere / utvideHashMap-klassen implementerer kartgrensesnitt og utvider en AbstractMap-klasse.Hashtabellen strekker seg fra Dictionary Legacy-klassen, men den er omkonstruert og nå implementerer den også Kart-grensesnittet.
synkroniseringHashMap er ikke synkronisert, og følgelig er HashMap-objektet ikke tredd sikkert.Hashtable er synkronisert, og følgelig er Hashtable-objektet trådsikker.
Keys / verdiEn tast kan returnere Null bare én gang, men en verdi kan returnere Null når som helst.En nøkkel kan ikke returnere Null, fordi den brukes til å få hasjkoden som vil bli brukt som en indeks for hasjbordet, og heller ikke en verdi kan returnere Null.
Standard startkapasitetStandard initialkapasitet på HashMap er 16.Standard initialkapasitet på Hashtable er 11.
traverseringHashMap blir krysset av Iterator.Som at Map-klassen Hashtable heller ikke direkte støtter Iterator for å krysse og dermed bruker den Enumerator.


Definisjon av HashMap

HashMap er en klasse som implementerer Kart grensesnitt og utvider AbstractMap klasse bruker hasjbordet. HashMap-objektet refererer til en samling / sett med par der hver tast er kartlagt til en bestemt verdi. Nøkler i en samling må være unike da de brukes til å hente verdien. På den annen side kan verdiene i en samling dupliseres. Erklæringen om HashMap-klassen og konstruktører av HashMapclass er som følger:

/ * K representerer nøkkel, og V representerer verdi * / klasse HashMap / * Konstruktører av HashMap-klasse * / HashMap () HashMap (Kart <? Utvider K,? Utvider V> m) HashMap (int-kapasitet) HashMap (int-kapasitet, float fillRatio)

Den første konstruktøren er en standardkonstruktør som initialiserer et tomt objekt fra HashMap med en standardkapasitet på 16 og et standardfyllingsforhold på 0,75. Den andre konstruktøren initialiserer hasjkartet med verdien m. Den tredje konstruktøren lager et hashkart med den innledende kapasiteten som tilsvarer verdien gitt i argumentet “kapasitet”. Den fjerde konstruktøren initialiserer hasjkart med kapasitet og fyllingsforhold gitt i parametrene. la oss nå lære å mate oppføringene på et hasjkart.


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

I koden over kan du se at jeg opprettet et tomt HashMap-objekt hm med standard startkapasitet og standard fyllingsforhold. Så satte jeg inn fire oppføringer i hasjkartet ved hjelp av put (K, V) -metoden som kartlegger nøkkelen til verdien. Du kan se at oppføringer ikke er redigert i en sekvens du mater dem fordi innsettingsrekkefølgen ikke er fast. Nå, vurder en sak som du allerede har en oppføring i hasjkartet, og etter det prøver du å sette inn put (K1, V5), dvs. prøver du å kartlegge den samme tasten med en annen verdi. Deretter vil put-metoden erstatte den gamle verdien V1 med den nye verdien V2 og returnere den gamle verdienV1, ellers, hvis vi aldri prøver å erstatte en tastens verdi, returnerer put-metoden Null for den nøkkelen.

Definisjon av Hashtable

Hashtable er en klasse som utvider Ordbok klasse som er en arv klasse og reengineerered å implementere Kart grensesnitt. Hashtabellen bruker hasjtabellen som datastruktur. Hashtabellen ligner på HashMap som her også refererer objektet til Hashtable samlingen av oppføringer der hver oppføring er et par av . Alle nøklene i en samling må på den annen side være unike, verdiene kan dupliseres. Tastene brukes spesielt for å få hasjkodeverdien som bestemmer indeksen, hvor par vil bli lagret i et hasjbord. I en hasjetabell kan verken en nøkkel eller en verdi returnere Nullpekeren. La oss se erklæringen om Hashtable-klassen og konstruktører av hashtable-klassen.

/ * K spesifiserer nøkkelen og V spesifiserer verdien tilknyttet nøkkelen * / klasse Hashtable / * konstruktører av Hashtable * / Hashtable () Hashtable (int størrelse) Hashtable (int størrelse, float fillRatio) Hashtable (Kart <? forlenger K,? strekker seg V> m)

I koden over er den første konstruktøren en standardkonstruktør som oppretter et tomt objekt av en klasse Hashtable, standardstørrelsen er 11 og standard fyllingsforhold er 0,75. Den andre konstruktøren lager en hasjtabell med størrelsen som tilsvarer verdien gitt i parameteren “størrelse”. Den tredje konstruktøren lager et hasjbord med en størrelse og et fyllingsforhold gitt i parameteren. Den fjerde konstruktøren initialiserer hasjbordet med verdien m. La oss nå lære hvordan du setter inn par i hasjbordet.

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

I koden over opprettet jeg et tomt objekt fra Hashtable og satte inn fire oppføringer ved å bruke put () -metoden. Inside put-metoden kalte jeg hashCode () som beregner og returnerer hashkodeverdien som vil fungere som indeksverdien for oppføringsobjekt. Som du ser nevnte jeg ikke størrelsen på hasjetabellen, så som standard vil den være 11. Her er ikke innsettelsesrekkefølge bevart, og når redigerte oppføringer ikke vises i sekvens ble den matet.

  1. HashMap implementerer Kart grensesnitt og utvider en abstrakt klasse, AbstractMap mens Hashtabellen utvider den abstrakte klassen Ordbok, som også er en Legacy-klasse, senere reengineerered for å implementere Kart grensesnitt.
  2. HashMap-objektet er usynkroniserte dvs. flere tråder kan operere på den på samme tid, og derfor gjenstander de at de ikke er trådsikre. På den annen side er gjenstandene til Hashtable synkronisert dvs. hvis en tråd ønsker å operere på et objekt fra Hashtable, må den skaffe seg en lås på det objektet slik at ingen andre tråder kunne få tilgang til dette objektet, og dermed er det trådsikkert.
  3. I HashMap kan nøkkelen gå tilbake Null bare en gang, og verdien kan returnere Null flere ganger. På den annen side kan A-tasten aldri returnere Null som den pleide å få hashkodeverdien som brukes som en indeks for å lagre par og heller ikke en verdi kan returnere Null.
  4. Standardkapasiteten til et hasjbord i HashMap-klassen er 16 mens standardkapasiteten til et hasjbord i Hashtable er 11.
  5. De iterator kan krysse Hashmap-oppføringer. På den annen side støtter Hashtabellen ikke direkte Iteratoren og dermed generelt enumerator brukes til å krysse oppføringene i Hashtable.

likheter:

  • HashMap og Hashtable bruker begge datastrukturen til hasjbord.
  • HashMap og Hashtable begge redskaper Kart grensesnitt
  • Innføringsrekkefølge er ikke bevart i både HashMap og Hashtable og basert på hasjkoden oppnådd ved hjelp av nøkler.
  • I HashMap og Hashtable må nøkler være unik mens verdiene kan være duplisert.
  • HashMap og Hashtable kan begge inneholde heterogene gjenstander for både nøkler og verdier.
  • HashMap og Hashtable, begge redskaper serializable og Cloneable grensesnitt men ikke, tilfeldig tilgang.
  • HashMap og Hashtable har begge standardfyllingsforhold 0.75.
  • HashMap og Hashtable er begge best for henting eller søker operasjoner.

Konklusjon:

HashMap har bedre ytelse ettersom objektene er usynkroniserte og flere tråder kan operere på den samtidig, og derfor er den raskere enn Hashtable.