021 ¿Cuál es la diferencia entre HashMap y Hashtable?

¿Cuál es la diferencia entre HashMap y Hashtable?

Respuesta:

1. Diferente seguridad de hilo

  • Hashtable es seguro para subprocesos, y el método Sincronizar se agrega a cada método. En un entorno multiproceso, puede usar Hashtable directamente, no necesita sincronizarlo con su propio método

  • HashMap no es seguro para subprocesos. En un entorno de subprocesos múltiples, pueden producirse problemas como un punto muerto. Las razones específicas se analizarán en detalle en el próximo artículo. Cuando use HashMap, debe agregar el procesamiento de sincronización usted mismo,

  • Aunque HashMap no es seguro para subprocesos, es mucho más eficiente que Hashtable. Este diseño es razonable. En nuestro uso diario, la mayoría de las veces es una operación de un solo subproceso. HashMap liberó esta parte de la operación. Puede usar el ConcurrentHashMap seguro para subprocesos cuando necesite operaciones de subprocesos múltiples. Aunque ConcurrentHashMap también es seguro para subprocesos, su eficiencia es muchas veces mayor que Hashtable. Debido a que ConcurrentHashMap usa un bloqueo segmentado, no bloquea todos los datos

2. Diferentes clases de padres heredados

  • HashTable se hereda de la clase Dictionary y HashMap se hereda de la clase AbstractMap. Sin embargo, todos implementan las tres interfaces de map, Cloneable y Serializable.

3. Soporte diferente para clave nula y valor nulo

  • HashTable no permite valores nulos (ni clave ni valor), HashMap permite valores nulos (clave y valor). Solo hay una de esas claves, y puede haber una o más claves correspondientes a null.

4. Diferentes métodos de recorrido

  • HashTable usa Enumeration para atravesar, HashMap usa Iterator para atravesar.

5. Diferentes métodos de inicialización y expansión

  • El tamaño de inicialización y el método de expansión de la matriz hash en HashTable son diferentes.

  • El tamaño inicial de Hashtable es de forma predeterminada 11. Después de cada expansión, la capacidad se convierte en 2n + 1. El tamaño de inicialización predeterminado de HashMap es 16. Después de cada expansión, la capacidad se duplicará.

  • Al crear, si se proporciona el valor inicial de la capacidad, Hashtable usará directamente el tamaño que le dé, y HashMap lo ampliará a la potencia de 2. En otras palabras, Hashtable intentará usar números primos y números impares. HashMap siempre usa una potencia de 2 como el tamaño de la tabla hash.

6. El método para calcular el valor hash es diferente.

Supongo que te gusta

Origin www.cnblogs.com/ynzj123/p/12677604.html
Recomendado
Clasificación