Forskellen mellem HashMap og Hashtable i Java

Forfatter: Laura McKinney
Oprettelsesdato: 2 April 2021
Opdateringsdato: 5 Kan 2024
Anonim
Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]
Video.: Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]

Indhold


HashMap og Hashtable bruges begge til at repræsentere en gruppe af objekter der er repræsenteret i par. Hver par kaldes Indgang objekt. Det kollektion af poster henvises til genstanden HashMap og Hashtable. Nøgler i en samling skal være unikke eller karakteristiske. Forskellen mellem HashMap og Hashtable er det HashMap implementerer især Map-grænsefladen, hvorimod hashtabelsamling udvider ordbogsklassen (legacy class), som genudvikles for at implementere kortgrænsefladen. Den anden vigtige forskel er, at objekter fra HashMap er usynkroniseret hvorimod objekterne med Hashtable er synkroniseret.

Lad os se sammenligningstabellen nedenfor for at lære flere forskelle mellem HashMap og Hashtable.

  1. Sammenligningstabel
  2. Definition
  3. Vigtige forskelle
  4. ligheder
  5. Konklusion

Sammenligningstabel

Grundlag for sammenligningHashMaphashtabelsamling
Implementere / udvideHashMap-klassen implementerer Map-interface og udvider en AbstractMap-klasse.Hashtabellen strækker sig fra klassen Dictionary Legacy, men den er genudviklet og nu implementerer den også Map-interface.
SynkroniseringHashMap er ikke synkroniseret, og HashMap-objektet er derfor ikke trådt sikkert.Hashtable er synkroniseret, og derfor er Hashtable-objektet tråd-sikkert.
Nøgler / værdiEn nøgle kan kun returnere Null én gang, men en værdi kan returnere Null ethvert antal tid.En nøgle kan ikke returnere Null, da den bruges til at få den hash-kode, der vil blive brugt som et indeks for hash-tabellen, og heller ikke en værdi kan returnere Null.
Standard startkapacitetDen oprindelige startkapacitet på HashMap er 16.Den oprindelige startkapacitet på Hashtable er 11.
gennemkørerHashMap krydses af Iterator.Ligesom Map class Hashtable heller ikke direkte understøtter Iterator til at krydse og dermed bruger den Enumerator.


Definition af HashMap

HashMap er en klasse, der implementerer Kort interface og udvider AbstractMap klasse bruger hash-tabellen. HashMap's objekt refererer til en samling / sæt med par, hvor hver tast er kortlagt til en bestemt værdi. Taster i en samling skal være unikke, da de bruges til at hente værdien. På den anden side kan værdierne i en samling duplikeres. Erklæringen af ​​HashMap-klassen og konstruktører af HashMapclass er som følger:

/ * K repræsenterer nøgle, og V repræsenterer værdi * / klasse HashMap / * Konstruktører af HashMap-klassen * / HashMap () HashMap (kort <? Udvider K,? Udvider V> m) HashMap (int-kapacitet) HashMap (int-kapacitet, float fillRatio)

Den første konstruktør er en standardkonstruktør, der initialiserer et tomt objekt fra HashMap med en standardkapacitet på 16 og et standardfyldningsforhold på 0,75. Den anden konstruktør initialiserer hashkortet med værdien m. Den tredje konstruktør opretter et hashkort med den indledende kapacitet svarende til værdien leveret i argumentet “kapacitet”. Den fjerde konstruktør initialiserer hashkort med en kapacitet og et fyldningsforhold, der findes i parametrene. lad os nu lære at fodre posterne på et hashkort.


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

I ovenstående kode kan du se, at jeg oprettede et tomt HashMap-objekt hm med standard initialkapacitet og standardfyldningsforhold. Derefter indsatte jeg fire poster i hashkortet ved hjælp af put (K, V) metode, der kortlægger nøglen til værdien. Du kan observere, at poster ikke redigeres i en sekvens, du fodrer dem, fordi indsættelsesrækkefølgen ikke er fast. Overvej nu en sag, hvor du allerede har en post på hashkortet, og derefter prøver du at indsætte put (K1, V5), dvs. prøver du at kortlægge den samme nøgle med en anden værdi. Derefter erstatter put-metoden den gamle værdi V1 med den nye værdi V2 og returnerer den gamle værdi V1, ellers hvis vi aldrig prøver at erstatte en nøgles værdi, returnerer put-metoden Null for den nøgle.

Definition af Hashtable

Hashtable er en klasse, der udvider Ordbog klasse, der er en arv klasse og genudvikles til at gennemføre Kort grænseflade. Hashtabellen bruger hash-tabellen som dens datastruktur. Hashtabellen ligner HashMap, da også her Hashtables objekt henviser til samlingen af ​​poster, hvor hver post er et par af . Alle nøgler i en samling skal på den anden side være unikke, værdierne kan duplikeres. Tasterne bruges især til at få den hashkode, der bestemmer indekset, hvor par gemmes i en hash-tabel. I en hashtabel kan hverken en nøgle eller en værdi returnere Nul-markøren. Lad os se erklæringen af ​​Hashtable-klassen og konstruktører af hashtable-klassen.

/ * K specificerer nøglen, og V specificerer den værdi, der er knyttet til nøglen * / klasse Hashtable / * konstruktører af Hashtable * / Hashtable () Hashtable (int størrelse) Hashtable (int størrelse, float fillRatio) Hashtable (Kort <? strækker sig K,? strækker sig V> m)

I ovenstående kode er den første konstruktør en standardkonstruktør, der opretter et tomt objekt i en klasse Hashtable, dens standardstørrelse er 11 og standardpåfyldningsforholdet er 0,75. Den anden konstruktør opretter en hashtabel med den størrelse, der svarer til den værdi, der er angivet i parameteren ”størrelse”. Den tredje konstruktør opretter en hash-tabel med en størrelse og et fyldningsforhold, der findes i parameteren. Den fjerde konstruktør initialiserer hashtabellen med værdien m. Lad os nu lære at indsætte par i hashbordet.

Hashtable ht = ny 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); / * output * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

I ovenstående kode oprettede jeg et tomt objekt fra Hashtable og indsatte fire poster ved hjælp af put () -metoden. Inside put-metode kaldte jeg hashCode (), som beregner og returnerer hashkodeværdien, der fungerer som indeksværdien for indgangsobjekt. Som du kan se nævnte jeg ikke størrelsen på hashtabellen, så som standard er den 11. Her er også indsættelsesrækkefølge ikke bevaret, og når ed-poster ikke vises i rækkefølge, blev den fodret.

  1. HashMap implementerer Kort interface og udvider en abstrakt klasse, AbstractMap hvorimod Hashtabellen udvider den abstrakte klasse Ordbog, som også er en Legacy-klasse, senere genudviklet til at implementere Kort grænseflade.
  2. HashMap-objektet er usynkroniseret dvs. flere tråde kan operere på det på samme tid, og derfor genstander de ikke for trådbeskyttet. På den anden side er objekterne fra Hashtable synkroniseret dvs. hvis en tråd ønsker at operere på et objekt fra Hashtable, er det nødt til at erhverve en lås på det objekt, så ingen anden tråd kunne få adgang til dette objekt, og dermed er det tråd-sikkert.
  3. I HashMap kan nøglen vende tilbage Nul kun én gang, og værdien kan vende tilbage Nul flere gange. På den anden side kan A-tasten aldrig returnere Null, da den bruges til at få den hashkodeværdi, der bruges som et indeks til at gemme par og heller ikke en værdi kan returnere Null.
  4. Standardkapaciteten for en hash-tabel i HashMap-klassen er 16 hvorimod standardkapaciteten for en hash-tabel i Hashtable er 11.
  5. Det iterator kan krydse Hashmap-poster. På den anden side understøtter Hashtabellen ikke direkte Iteratoren og dermed generelt Enumerator bruges til at krydse posterne i Hashtable.

ligheder:

  • HashMap og Hashtable bruger begge datastrukturen til hash bord.
  • HashMap og Hashtable begge redskaber Kort grænseflade
  • Indsætningsordre bevares ikke i både HashMap og Hashtable og baseret på hash-koden opnået ved hjælp af nøgler.
  • I HashMap og Hashtable skal nøgler være enestående mens værdierne kan være duplikeret.
  • HashMap og Hashtable kan begge indeholde heterogene genstande for både taster og værdier.
  • HashMap og Hashtable, begge redskaber serializable og Cloneable grænseflader, men ikke tilfældig adgang.
  • HashMap og Hashtable har begge standardfyldningsforhold 0.75.
  • HashMap og Hashtable er begge bedst til hentning eller søger operationer.

Konklusion:

HashMap har en bedre ydelse, da dens objekter er usynkroniserede, og flere tråde kan operere på det på samme tid, og det er derfor hurtigere end Hashtable.