Forskjeller mellom HashMap og Hashtable

1. Oversikt

I denne korte opplæringen skal vi fokusere på kjerneforskjellene mellom Hashtable og HashMap.

2. Hashtable og HashMap i Java

Hashtable og HashMap er ganske like - begge er samlinger som implementerer Kart grensesnitt.

Også, den sette(), få(), fjerne(), og inneholderKey () metoder gir konstant tids ytelse O (1). Internt fungerer disse metodene basert på et generelt begrep med hashing ved bruk av bøtter for lagring av data.

Ingen av klassene opprettholder innsettingsrekkefølgen for elementene. Med andre ord, det første elementet som legges til er kanskje ikke det første elementet når vi gjentar verdiene.

Men de har også noen forskjeller som gjør en bedre enn en annen i noen situasjoner. La oss se nærmere på disse forskjellene.

3. Forskjeller mellom Hashtable og HashMap

3.1. Synkronisering

For det første, Hashtable er trådsikker og kan deles mellom flere tråder i applikasjonen.

På den andre siden, HashMap er ikke synkronisert og kan ikke nås av flere tråder uten ekstra synkroniseringskode. Vi kan bruke Collections.synchronizedMap () å lage en trådsikker versjon av en HashMap. Vi kan også bare lage tilpasset låsekode eller gjøre koden trådsikker ved å bruke synkronisert nøkkelord.

HashMap er ikke synkronisert, derfor er den raskere og bruker mindre minne enn Hashtable. Usynkroniserte objekter er generelt raskere enn synkroniserte objekter i et enkelt gjenget program.

3.2. Nullverdier

En annen forskjell er null håndtering. HashMap tillater å legge til en Inngang med null som nøkkel samt mange oppføringer med null som verdi. I motsetning, Hashtable tillater ikke null i det hele tatt. La oss se et eksempel på null og HashMap:

HashMap-kart = nytt HashMap (); map.put (null, "verdi"); map.put ("key1", null); map.put ("nøkkel2", null);

Dette vil føre til:

assertEquals (3, map.size ());

Deretter, la oss se hvordan Hashtable er annerledes:

Hashtable-tabell = ny Hashtable (); table.put ("nøkkel", null);

Dette resulterer i en NullPointerException. Legge til et objekt med null som nøkkel resulterer også i en NullPointerException:

table.put (null, "verdi");

3.3. Iterasjon over elementer

HashMap bruker Iterator å gjentas over verdier, mens Hashtable har Oppteller for det samme. De Iterator er en etterfølger av Oppteller som eliminerer de få ulempene. For eksempel, Iterator har en fjerne() metode for å fjerne elementer fra underliggende samlinger.

De Iterator er en feilrask iterator. Med andre ord kaster det a ConcurrentModificationException når den underliggende samlingen endres mens den gjentas. La oss se eksemplet på fail-fast:

HashMap-kart = nytt HashMap (); map.put ("nøkkel1", "verdi1"); map.put ("key2", "value2"); Iterator iterator = map.keySet (). Iterator (); mens (iterator.hasNext ()) {iterator.next (); map.put ("key4", "value4"); }

Dette kaster en ConcurrentModificationException unntak fordi vi ringer sette() mens det gjentar seg over samlingen.

4. Når skal du velge HashMap Over Hashtable

Vi burde bruke HashMap for et usynkronisert eller enkelttrådet program.

Det er verdt å nevne at siden JDK 1.8, Hashtable er utfaset. Derimot, ConcurrentHashMap er en flott Hashtable erstatning. Vi bør vurdere ConcurrentHashMap å bruke i applikasjoner med flere tråder.

5. Konklusjon

I denne artikkelen illustrerte vi forskjeller mellom HashMap og Hashtable og hva du må huske på når vi trenger å velge en.

Som vanlig er implementeringen av alle disse eksemplene og kodebitene over på Github.


$config[zx-auto] not found$config[zx-overlay] not found