Насколько я знаю, java.util.Hashtable
синхронизирует каждый и каждый метод в интерфейсе java.util.Map
, в то время как Collections.synchronizedMap(hash_map)
возвращает объект-оболочку, содержащую синхронизированные методы делегирования вызовов к фактическому hash_map
(поправьте меня, если я я ошибаюсь).разница между Hashtable и Collections.synchronizedMap (HashMap)
У меня есть два вопроса:
Какая разница сделать, чтобы синхронизировать каждый и каждый метод и имеют класс обертку? Каковы сценарии выбора одного над другим?
Что происходит, когда мы делаем
Collections.synchronizedMap(hash_table)
? Будет ли это равным простому использованию нормальногоjava.util.Hashtable
?
Возможный дубликат [Различия между HashMap и Hashtable?] (Http://stackoverflow.com/questions/40471/differences-between-hashmap-and-hashtable) –
Это не дубликат * этого * вопроса. Это сравнивает синхронизированную оболочку по HashMap (или HashTable) с помощью HashTable. –
Мне было бы интересно узнать, есть ли различия в производительности, на которые не отвечает ни один из текущих ответов. Вызов методов 'Collections.synchronizedMap' с помощью переменной типа Map означает, что перед тем, как перейти к реализации, есть два виртуальных вызова интерфейса, тогда как с Hashtable существует не более 1 виртуального вызова, и вы можете объявить свою переменную как тип Hashtable напрямую, и делать это с помощью 0 виртуальных вызовов. Но, возможно, HashMap отличается другими способами, которые ускоряют работу в целом. – Boann