Diferència entre HashMap i Hashtable a Java

Autora: Laura McKinney
Data De La Creació: 2 Abril 2021
Data D’Actualització: 5 Ser Possible 2024
Anonim
Diferència entre HashMap i Hashtable a Java - Tecnologia
Diferència entre HashMap i Hashtable a Java - Tecnologia

Content


El quadre de comandament i el quadre de pantalla, s'utilitzen tots dos per representar un grup d'objectes que es representen a parella. Cadascun es diu parella Entrada objecte. El col · lecció de les entrades es refereix per l'objecte de HashMap i Hashtable. Les claus d'una col·lecció han de ser úniques o distintives. La diferència entre HashMap i Hashtable és que HashMap implementa especialment la interfície del mapa, mentre que, el Taula escriptori amplia la classe Diccionari (classe llegat) que es reenginyera per implementar la interfície de mapes. L’altra diferència important és que els objectes de HashMap ho són no sincronitzat mentre que, els objectes de Hashtable ho són sincronitzada.

Anem a veure el gràfic de comparació que es mostra a continuació per conèixer algunes diferències més entre HashMap i Hashtable.


  1. Gràfic de comparació
  2. Definició
  3. Diferències claus
  4. Semblances
  5. Conclusió

Gràfic de comparació

Bases per a la comparacióHashMapTaula escriptori
Implementar / AmpliarLa classe HashMap implementa la interfície Map i estén una classe AbstractMap.La taula de mostres s’estén a la classe del Diccionari Legat, però, es reenginyeria i ara també implementa la interfície Map.
SincronitzacióHashMap no està sincronitzat i, per tant, l’objecte HashMap no té seguretat pel fil.La taula de comandament està sincronitzada i, per tant, l'objecte de Hashtable és segur pel fil.
Claus / ValorUna tecla pot tornar Null una sola vegada, però un valor pot retornar Null qualsevol quantitat de temps.Una clau no pot tornar Null ja que s'utilitza per obtenir el codi hash que s'utilitzarà com a índex de la taula hash, ni un valor pot retornar Null.
Capacitat inicial per defecteLa capacitat inicial predeterminada de HashMap és de 16.La capacitat inicial predeterminada de Hashtable és 11.
TraversHashMap el recorre Iterator.Igual que la classe de mapa Hashtable tampoc no admet directament Iterator per al desplaçament i, per tant, utilitza Enumerator.


Definició de HashMap

HashMap és una classe que implementa Mapa interfície i amplia la secció AbstractMap classe utilitza la taula hash. L'objecte del HashMap fa referència a una col·lecció o a un conjunt de parella on cada clau s'assigna a un valor particular. Les claus d'una col·lecció han de ser úniques, ja que s'utilitzen per recuperar el valor. D'altra banda, els valors d'una col·lecció es poden duplicar. La declaració de la classe HashMap i els constructors de la classe HashMapclass són les següents:

/ * K representa la clau i V representa el valor * / classe HashMap / * Constructors de la classe HashMap * / HashMap () HashMap (Mapa <? Estén K,? Estén V> m) HashMap (int capacitat) HashMap (capacitat int, float fillRatio)

El primer constructor és un constructor predeterminat que inicialitza un objecte buit de HashMap amb una capacitat predeterminada de 16 i una relació d'ompliment per defecte de 0,75. El segon constructor inicialitza el mapa de hash amb el valor de m. El tercer constructor crea un mapa hash amb la capacitat inicial corresponent al valor proporcionat a l'argument "capacitat". El quart constructor inicialitza el mapa hash amb una capacitat i una proporció d'ompliment proporcionada als paràmetres. aprenguem ara com alimentar les entrades en un mapa hash.

Hashmap hm = Hashmap nou (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordània", 200); System.out.ln (hm); / * sortida * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordània = 200}

Al codi anterior, podeu veure que he creat un objecte HashMap buit hm amb capacitat inicial predeterminada i proporció d'ompliment predeterminada. A continuació, he inserit quatre entrades al mapa hash mitjançant el mètode put (K, V) que assenyala la clau del valor. Podeu observar que les entrades no s’editen en una seqüència que les feu servir perquè l’ordre d’inserció no és fix. Ara, considereu un cas que ja teniu una entrada al mapa de hash i, després, intenteu inserir put (K1, V5), és a dir, proveu de mapar la mateixa clau amb un valor diferent. Aleshores, el mètode put substituirà el valor V1 antic pel nou valor V2 i retorna el valor V1 antic, si no, si no intentem substituir el valor d'una clau, el mètode de posada retorna Null per a aquesta clau.

Definició de Hashtable

La taula de comandes és una classe que estén la secció Diccionari classe que és una classe de llegat i reenginyada per implementar la Mapa interfície. La taula de control fa servir la taula de hash com a estructura de dades. La taula de captació és similar a la de HashMap, ja que també l'objecte de Hashtable fa referència a la col·lecció d'entrades on cada entrada és un parell de . Totes les claus d'una col·lecció han de ser úniques. D'altra banda, es poden duplicar els valors. Les claus s'utilitzen especialment per obtenir el valor del codi hash que decideix l'índex, on és el parell es guardarà en una taula de hash. En una taula hash, ni una clau ni un valor poden retornar el punter Nul. Vegem la declaració de classe Hashtable i constructors de classe hashtable.

/ * K especifica la clau i V especifica el valor associat a la clau * / classe Taula de taula / * constructors de Hashtable * / Hashtable () Hashtable (mida int) Hashtable (mida int, float fillRatio) Hashtable (Mapa <? estén K,? estén V> m)

Al codi anterior, el primer constructor és un constructor predeterminat que crea un objecte buit d'una classe de taula de taula, la seva mida predeterminada és 11 i la proporció d'ompliment per defecte és de 0,75. El segon constructor crea una taula hash amb la mida corresponent al valor proporcionat al paràmetre “size”. El tercer constructor crea una taula de hash amb una mida i una proporció d'ompliment proporcionades al paràmetre. El quart constructor inicialitza la taula hash amb el valor m. Aprenguem ara com s’inserirà parella a la taula de hash.

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

Al codi anterior, he creat un objecte buit de Hashtable i he inserit quatre entrades mitjançant el mètode put (). Al mètode put anomenat hashCode (), que calcula i retorna el valor del codi hash, que actuarà com a valor índex per a l'objecte d'entrada. Com veieu, no he esmentat la mida de la taula de hash, per defecte serà 11. Aquí també, l’ordre d’inserció no es conserva i, per tant, quan les entrades ed no apareixien en seqüència, es va alimentar.

  1. Les implementacions HashMap Mapa interfície i amplia una classe abstracta, AbstractMap mentre que, la taula de capçalera amplia la classe abstracta Diccionari, que també és una classe Legacy, posteriorment es va reenginyar per implementar Mapa interfície.
  2. L’objecte HashMap és no sincronitzat és a dir, diversos fils poden operar al mateix temps i, per tant, no objecte de fils. D'altra banda, els objectes de Hashtable són sincronitzada és a dir, si un fil vol operar sobre un objecte de Hashtable, ha d’adquirir un bloqueig en aquest objecte de manera que cap altre fil podria accedir a aquest objecte i, per tant, és segur que no hi ha cap fil.
  3. A la tecla HashMap es pot tornar Nul només una vegadai el valor pot tornar Nul·la vegades. D'altra banda, una clau mai no pot retornar Null ja que s'utilitzava per obtenir el valor del codi hash que s'utilitza com a índex per emmagatzemar un parell ni un valor poden retornar Nul.
  4. La capacitat predeterminada d'una taula de hash de la classe HashMap és 16 mentre que, la capacitat predeterminada d'una taula de hash a Taula de tecla és 11.
  5. El Iterador pot recórrer les entrades de mapa de pantalla. D'altra banda, la taula de mostres no admet directament l'Iterator i, per tant, generalment Enumerador s'utilitza per recórrer les entrades de la taula de taules.

Similituds:

  • HashMap i Hashtable fan servir l 'estructura de dades de la web taula de hash.
  • HashMap i Hashtable implementen tots dos Mapa interfície
  • L'ordre d'inserció no es conserva tant HashMap com Hashtable i basats en el codi hash obtingut mitjançant claus.
  • En HashMap i Hashtable, les tecles han de ser únic mentre que, els valors poden ser duplicat.
  • HashMap i Hashtable poden contenir tots dos objectes heterogenis tant per a claus com per a valors.
  • HashMap i Hashtable, tots dos implementes Serialitzable i Clonable interfícies però no, accés aleatori.
  • HashMap i Hashtable tenen una proporció d'ompliment predeterminada 0.75.
  • HashMap i Hashtable són perfectes per recuperar o cercant operacions

Conclusió:

HashMap té un millor rendiment ja que els seus objectes no estan sincronitzats i diversos fils poden operar al mateix temps i, per tant, és més ràpid que Hashtable.