Forskel mellem HashMap og Hashtable

Java Collections-rammen giver et sæt samlingsklasser. Hver klasse har sine egne præstationsstyrker og svagheder. Nogle af klasserne giver fuld implementeringer, der kan bruges som den er. Andre er abstrakte, som giver skeletimplementeringer, der bruges som udgangspunkt for oprettelse af samlinger. Samlingsimplementeringerne bruger den synkroniserede indpakningsramme til at tilvejebringe synkroniserede klasser, ellers er implementeringerne ikke synkroniserede. Flere klasser giver implementeringer af kortgrænsefladen.

Java-platformen indeholder tre generelle kortimplementeringer: HashMap, TreeMap og LinkedHashMap. HashMap og Hashtable er to samlinger i Java, der bruges til at gemme nøgle / værdipar i en hash-tabel. Hashtable er et synkroniseret kort, og HashMap er et usynkroniseret kort. Ikke desto mindre, hvis du har brug for at bruge et synkroniseret kort, er en Hashtable hurtigere end at bruge en HashMap i en synkroniseret indpakning. Begge er hash-baserede samlinger i Java, men de har deres rimelige andel af forskelle. Vi fremhæver nogle vigtige forskelle mellem de to for at hjælpe dig med bedre at forstå betingelserne.

Hvad er HashMap?

HashMap er en kortimplementering, der er baseret på en hash-tabel, der giver ydeevne med konstant tid til indsættelse og placering af par. HashMap-klassen giver en kortimplementering, der er baseret på en Hashtable-datastruktur. Denne implementering understøtter alle kortoperationer og tillader flere nulværdier, men kun en nulnøgle. Det bruger nøgle / værdipar til at gemme værdier i en hash-tabel. Det er et usynkroniseret kort, hvilket betyder, at det ikke er tråd-sikkert og ikke kan deles mellem flere tråde uden korrekt synkronisering.

Hvad er Hashtable?

I modsætning til HashMap er Hashtable et synkroniseret kort, og det er tråd-sikkert, hvilket betyder, at det kan deles mellem flere tråde. I Hashtable specificerer du et objekt, der kan bruges som en nøgle, og den værdi, der følger med nøglen. En Hashtable kortlægger nøgler til værdier ved hjælp af en hash-funktion. Java leverer denne funktion i form af Objekts hashcode () -metode, hvilke klasser tilsidesætter for at give passende hash-koder. I modsætning til HashMap understøtter Hashtable ikke nulværdier og nulnøgler, fordi der er nullcheck i put-metoden implementering af Hashtable.

Forskel mellem HashMap og Hashtable

  1. Grundlæggende om HashMap Vs. hashtabelsamling

Begge er hash-baserede samlinger i Java, der bruges til at gemme data i nøgle / værdipar. HashMap er en kortimplementering, der er baseret på en hash-tabel, der giver ydeevne med konstant tid til indsættelse og placering af par. Ydeevnen kan justeres ved hjælp af konstruktører, der giver dig mulighed for at indstille kapaciteten og belastningsfaktoren på hashbordet. Den grundlæggende Hashtable svarer meget til HashMap, selv nede på metodenavne. Det gemmer nøgle / værdipar i hashtabellen. I Hashtable specificerer du et objekt, der kan bruges som en nøgle, og den værdi, der følger med nøglen.

  1. Synkronisering af HashMap Vs. hashtabelsamling

Både HashMap og Hashtable bruger hashing-teknikker til at gemme værdier baseret på nøglen. Ligesom HashMap bruger Hashtable nøgle / værdipar til at gemme værdier i en hash-tabel. Den vigtigste forskel mellem de to er imidlertid synkronisering. HashMap er et usynkroniseret kort, mens Hashtable er et synkroniseret kort. Dette betyder, at HashMap ikke er tråd-sikker og ikke kan deles mellem flere tråde uden korrekt synkroniseringskode. Tværtimod, Hashtable er tråd-sikker og kan deles mellem flere tråde. Hashtable er hurtigere end at bruge en HashMap i en synkroniseret indpakning, hvis du skal bruge et synkroniseret kort.

  1. Nulle nøgler og nullværdier for HashMap Vs. hashtabelsamling

HashMap-klassen giver en kortimplementering, der er baseret på en Hashtable-datastruktur. Denne implementering understøtter alle kortoperationer og tillader flere nulværdier, men kun en nulnøgle, så den kunne opretholde unikke nøgleegenskaber. Det garanterer dog ikke i den rækkefølge, hvor posterne er gemt. Hashtabellen kortlægger på den anden side nøgler til værdier ved hjælp af en hash-funktion. I modsætning til HashMap understøtter Hashtable ikke nulværdier og nulnøgler, fordi der er nullcheck i put-metoden implementering af Hashtable.

  1. Ydelse af HashMap Vs. hashtabelsamling

Da HashMap ikke er et synkroniseret kort, er det meget hurtigere og bedre end en Hashtable med hensyn til ydeevne, og bruger faktisk mindre hukommelse end Hashtable. Selvom de er næsten identiske, er Hashtable lidt langsommere end en HashMap, men hurtigere end en synkroniseret HashMap. Indvendigt er det ikke sikkert at bruge Hashtable med multetrådadgang, fordi kun metoderne er synkroniserede. Hashtable er det synkroniserede modstykke til HashMap. Usynkroniserede objekter fungerer bedre, når de sammenlignes med synkroniserede objekter, ligesom en Hashtable klarer sig bedre i et enkelt gevindmiljø.

HashMap vs. Hashtable: Sammenligningstabel

 

Oversigt over HashMap Vs. hashtabelsamling

HashMap-klassen giver dig et usorteret, uordnet kort. Så når du har brug for et kort, og du ikke er interesseret i den rækkefølge, hvor posterne er gemt, så er HashMap vejen.

Hashtable, ligesom Vector, har været i fra forhistorisk Java-tid. Ligesom Vector er et synkroniseret modstykke til den mere moderne og avancerede ArrayList, er Hashtable det synkroniserede modstykke til HashMap. En klasse kan imidlertid ikke synkroniseres, så når vi siger, at Hashtable er et synkroniseret kort, betyder det, at klassens nøglemetoder synkroniseres. 

Mens begge er næsten identiske, ligger forskellen i den måde, de synkroniseres på, og hvordan de fungerer. HashMap klarer sig bedre i et multi-threaded miljø, mens Hashtable klarer sig bedre i et enkelt threaded miljø.