Por lo que sé, java.util.Hashtable
sincroniza todos y cada método de la interfaz java.util.Map
, mientras Collections.synchronizedMap(hash_map)
devuelve un objeto contenedor que contiene métodos sincronizados delegación de llamadas a la actual hash_map
(corregir si me estoy equivocado).Diferencia entre Hashtable y Collections.synchronizedMap (HashMap)
Tengo dos preguntas:
Qué diferencia hace para sincronizar todos y cada método y para tener una clase de contenedor? ¿Cuáles son los escenarios para elegir uno sobre el otro?
¿Qué sucede cuando hacemos
Collections.synchronizedMap(hash_table)
? ¿Será esto igual a simplemente usar unjava.util.Hashtable
normal?
posible duplicado de [Diferencias entre HashMap y Hashtable?] (Http://stackoverflow.com/questions/40471/differences-between-hashmap-and-hashtable) –
Esto no es un duplicado de * esa * pregunta. Esto es comparar el contenedor sincronizado sobre un HashMap (o HashTable) con un HashTable. –
Me interesaría saber si existen diferencias en el rendimiento, que ninguna de las respuestas actuales aborda. Los métodos de llamada de un 'Collections.synchronizedMap' a través de una variable de tipo Map significa que hay 2 llamadas virtuales de interfaz antes de llegar a la implementación, mientras que con Hashtable, hay como máximo 1 llamada virtual, y puede declarar su variable como tipo Hashtable directamente, y hazlo con 0 llamadas virtuales. Pero quizás HashMap difiera de otras formas que lo hacen más rápido en general. – Boann