Diferencia entre HashMap y Hashtable en Java

Autor: Laura McKinney
Fecha De Creación: 2 Abril 2021
Fecha De Actualización: 5 Mayo 2024
Anonim
Difference between HashMap and Hashtable in Java
Video: Difference between HashMap and Hashtable in Java

Contenido


HashMap y Hashtable, ambos se utilizan para representar un grupo de objetos que están representados en par. Cada par se llama Entrada objeto. los colección El objeto de HashMap y Hashtable hace referencia a las entradas. Las claves de una colección deben ser únicas o distintivas. La diferencia entre HashMap y Hashtable es que HashMap implementa particularmente la interfaz de Mapa mientras que, el Tabla de picadillo extiende la clase Diccionario (clase heredada) que se rediseñó para implementar la interfaz de Mapa. La otra diferencia importante es que los objetos de HashMap son no sincronizado mientras que los objetos de Hashtable son sincronizado.

Veamos el cuadro comparativo que se muestra a continuación para conocer algunas diferencias más entre HashMap y Hashtable.


  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Similitudes
  5. Conclusión

Cuadro comparativo

Bases para la comparaciónHashMapTabla de picadillo
Implementar / ExtenderLa clase HashMap implementa la interfaz Map y extiende una clase AbstractMap.El Hashtable se extiende de la clase Dictionary Legacy, pero está rediseñado y ahora también implementa la interfaz Map.
SincronizaciónHashMap no está sincronizado y, por lo tanto, el objeto HashMap no está protegido por subprocesos.Hashtable está sincronizado y, por lo tanto, el objeto de Hashtable es seguro para subprocesos.
Claves / ValorUna clave puede devolver Null solo una vez, pero un valor puede devolver Null cualquier cantidad de tiempo.Una clave no puede devolver Null ya que se usa para obtener el código hash que se usará como índice de la tabla hash, ni un valor puede devolver Null.
Capacidad inicial predeterminadaLa capacidad inicial predeterminada de HashMap es 16.La capacidad inicial predeterminada de Hashtable es 11.
AtravesarHashMap es atravesado por Iterator.Al igual que Map class, Hashtable tampoco admite directamente Iterator para atravesar y, por lo tanto, utiliza Enumerator.


Definición de HashMap

HashMap es una clase que implementa el Mapa interfaz y extiende el ResumenMapa La clase usa la tabla hash. El objeto de HashMap se refiere a una colección / conjunto de par donde cada clave se asigna a un valor particular. Las claves de una colección deben ser únicas, ya que se utilizan para recuperar el valor. Por otro lado, los valores en una colección se pueden duplicar. La declaración de la clase HashMap y los constructores de HashMapclass son los siguientes:

/ * K representa la clave y V representa el valor * / class HashMap / * Constructores de la clase HashMap * / HashMap () HashMap (Mapa <? Extiende K,? Extiende V> m) HashMap (int capacidad) HashMap (int capacidad, float fillRatio)

El primer constructor es un constructor predeterminado que inicializa un objeto vacío de HashMap con una capacidad predeterminada de 16 y una relación de relleno predeterminada de 0,75. El segundo constructor inicializa el mapa hash con el valor de m. El tercer constructor crea un mapa hash con la capacidad inicial correspondiente al valor proporcionado en el argumento "capacidad". El cuarto constructor inicializa el mapa hash con una capacidad y una relación de relleno proporcionada en los parámetros. aprendamos ahora cómo alimentar las entradas en un mapa hash.

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

En el código anterior, puede ver que creé un objeto HashMap vacío hm con capacidad inicial predeterminada y relación de llenado predeterminada. Luego inserté cuatro entradas en el mapa hash usando el método put (K, V) que asigna la clave al valor. Puede observar que las entradas no se editan en una secuencia en la que las alimenta porque el orden de inserción no es fijo. Ahora, considere un caso en el que ya tiene una entrada en el mapa hash y después de eso intentas insertar put (K1, V5), es decir, intentas asignar la misma clave con un valor diferente. Luego, el método put reemplazará el valor anterior V1 con el nuevo valor V2 y devolverá el valor anterior V1; de lo contrario, si nunca intentamos reemplazar el valor de una clave, el método put devuelve Nulo para esa clave.

Definición de Hashtable

Hashtable es una clase que extiende el Diccionario clase que es una clase heredada y está rediseñada para implementar el Mapa interfaz. Hashtable utiliza la tabla hash como su estructura de datos. Hashtable es similar a HashMap ya que aquí también el objeto de Hashtable se refiere a la colección de entradas donde cada entrada es un par de . Por otro lado, todas las claves de una colección deben ser únicas, los valores pueden duplicarse. Las claves se utilizan particularmente para obtener el valor del código hash que decide el índice, donde el par se almacenará en una tabla hash. En una tabla hash, ni una clave ni un valor pueden devolver un puntero nulo. Veamos la declaración de la clase Hashtable y los constructores de la clase hashtable.

/ * K especifica la clave y V especifica el valor asociado con la clave * / class Hashtable / * constructores de Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? extend K,? extend V> m)

En el código anterior, el primer constructor es un constructor predeterminado que crea un objeto vacío de una clase Hashtable, su tamaño predeterminado es 11 y la relación de relleno predeterminada es 0.75. El segundo constructor crea una tabla hash con el tamaño correspondiente al valor proporcionado en el parámetro "tamaño". El tercer constructor crea una tabla hash con un tamaño y una relación de relleno proporcionada en el parámetro. El cuarto constructor inicializa la tabla hash con el valor m. Aprendamos ahora cómo insertar el par en la tabla hash.

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

En el código anterior, creé un objeto vacío de Hashtable e inserté cuatro entradas usando el método put (). Dentro del método put, llamé a hashCode () que calcula y devuelve el valor del código hash que actuará como valor de índice para el objeto de entrada. Como puede ver, no mencioné el tamaño de la tabla hash, por lo que, por defecto, será 11. Aquí también, el orden de inserción no se conserva y, por lo tanto, cuando las entradas ed no aparecen en secuencia, se alimentan.

  1. Los implementos HashMap Mapa interfaz y extiende una clase abstracta, ResumenMapa mientras que Hashtable extiende la clase abstracta Diccionario, que también es una clase Legacy, luego rediseñada para implementar Mapa interfaz.
  2. El objeto HashMap es no sincronizado es decir, varios subprocesos pueden operar en él al mismo tiempo y, por lo tanto, los objetos no son seguros para subprocesos. Por otro lado, los objetos de Hashtable son sincronizado es decir, si un subproceso quiere operar en un objeto de Hashtable, debe adquirir un bloqueo en ese objeto para que ningún otro subproceso pueda acceder a ese objeto y, por lo tanto, es seguro para subprocesos.
  3. En HashMap la clave puede volver Nulo solo una vez, y el valor puede devolver Nulo varias veces. Por otro lado, una clave nunca puede devolver Null como se usaba para obtener el valor del código hash que se usa como índice para almacenar el par y ni un valor puede devolver Nulo.
  4. La capacidad predeterminada de una tabla hash en la clase HashMap es 16 mientras que la capacidad predeterminada de una tabla hash en Hashtable es 11.
  5. los Iterador puede atravesar entradas de Hashmap. Por otro lado, el Hashtable no admite directamente el iterador y, por lo tanto, generalmente Enumerador se usa para atravesar las entradas en Hashtable.

Similitudes:

  • HashMap y Hashtable utilizan la estructura de datos del tabla de picadillo.
  • HashMap y Hashtable ambos implementos Mapa interfaz
  • El orden de inserción no se conserva tanto en HashMap como en Hashtable y en función del código hash obtenido con las claves.
  • En HashMap y Hashtable, las claves deben ser único mientras que los valores pueden ser duplicado.
  • HashMap y Hashtable pueden contener objetos heterogéneos tanto para claves como para valores.
  • HashMap y Hashtable, ambos implementos Serializable y Clonable interfaces pero no, acceso aleatorio.
  • HashMap y Hashtable tienen una relación de relleno predeterminada 0.75.
  • HashMap y Hashtable son los mejores para recuperar o buscando operaciones

Conclusión:

HashMap tiene un mejor rendimiento ya que sus objetos no están sincronizados y varios subprocesos pueden operar en él al mismo tiempo y, por lo tanto, es más rápido que Hashtable.