2012-01-16 97 views
5

¿Cuál es la principal ventaja de usar Hashtable en comparación con HashMap. Porque, Hashtable principal ventaja es la sincronización. Ahora el mapa también se puede sincronizar usando synchronizedMap().Ventajas de HashTable

Map m = Collections.synchronizedMap(hashMap); 
+3

IINM, el uso de HashTable es en realidad desanima y se debe tratar de utilizar siempre HashMap en cualquier código de nuevo. Hashtable se conserva para compatibilidad con el código anterior. – MAK

+0

¿Por qué entonces java no desaprueba esa HashTable? – Kushan

+0

No existe tal HashTabl, se llama Hashtable y es "prehistórico" (antes) de la Colección IFS. Sus métodos están sincronizados, sin embargo, no garantiza que las referencias a los objetos que pueblan el Hashtable no puedan modificarse simultáneamente. – aviad

Respuesta

3

Hashtable existía antes de la marco de las colecciones, por lo que es retenido principalmente para la compatibilidad hacia atrás. Use ConcurrentHashMap en su lugar.

Tenga en cuenta que existe una ligera diferencia semántica: Hashtable no permite valores nulos, mientras que HashMap permite valores nulos y una clave nula.

+0

Rendimiento sabio, ¿cuál es la diferencia entre synchronizedMap() y Hashtable? – Kushan

+0

No debería haber una diferencia. Pero ConcurrentHashMap es mejor – Bozho

+0

Gracias por su apoyo ... – Kushan

2

HashTable ha quedado obsoleto hace mucho tiempo. La principal diferencia es que HashTable se sincroniza internamente, mientras que HashMap no lo está. Sin embargo, esto se ve como una desventaja, porque usar el HashTable en un solo hilo incurre en la penalidad de bloqueo y desbloqueo cuando no es necesario.

Además, otro punto que hace que la sincronización de HashTable 's no tan útil es el hecho de que la ejecución de dos operaciones de hilo de seguridad en una secuencia no garantiza la atomicidad de toda la secuencia, pensar, por ejemplo, a:

if(key does not exist) 
    add key 

mientras que probar existencia y agregar son seguros para subprocesos, el constructo anterior no lo es, porque otro subproceso podría interrumpirlo en el medio. Por lo tanto, la sincronización externa es necesaria de todos modos.

Como tal, no veo ninguna razón para utilizar HashTable en todos estos días ...