Подтвердить что ты не робот

Когда следует использовать Hashtable или HashMap

Это не вопрос о различиях между Hashtable и HashMap. Я понимаю, что объект Hashtable не может принимать значения null для записей ключа или значения, что является синхронизированной коллекцией и что она использует немного меньше памяти, чем HashMap.

Мне интересно о сценариях, где было бы более целесообразно использовать Hashtable вместо HashMap.

4b9b3361

Ответ 1

Это не вопрос о различиях между Hashtable и HashMap

Ну это действительно...

Мне интересно о сценариях, где было бы более целесообразно использовать Hashtable вместо HashMap.

Точно, когда вам нужны различия между ними:

  • Если вы хотите запускать Java 1.1
  • Если вы хотите, чтобы каждая операция была синхронизирована (вы получаете форму безопасности потоков, пока вы никогда не перебираете ее) - и по какой-то причине не хотите использовать Collections.synchronizedMap над HashMap
  • Если вы не хотите сохранять нулевые значения
  • Когда разница в памяти действительно значительна (только после того, как вы это доказали) - я даже не знал об этой разнице лично...
  • Когда вы вынуждены противным API, который возвращает или принимает Hashtable (относительно редко, к счастью)

Я не могу вспомнить последний раз, когда я был в этой ситуации, лично - я бы сказал, что исчезающе редко бывает подходящим использовать Hashtable в современном Java-коде.

Ответ 2

Никогда. Hashtable была оригинальной реализацией карты в Java 1. Она была охвачена реализациями Map. Конечно, Hashtable был модифицирован для соответствия, но это не очень полезно.

У него есть основная проблема в том, что он синхронизирован. Это означает, что он будет медленным в любых обстоятельствах, когда он разделяется между потоками. ConcurrentHashMap - лучший выбор в этой ситуации. Если вы работаете в одном потоке, тогда несинхронизированный HashMap является лучшим выбором.

Ответ 3

Я могу придумать только одну действительную причину - когда вы используете API, который этого требует, например JNDI сильно раздражает InitialContext class.

Кроме этого, я не вижу оснований использовать Hashtable вообще. Вы можете получить синхронизированную версию HashMap с помощью Collections.synchronizedMap.

Ответ 5

Знание того, когда использовать один класс или структуру над другим, в основном понимает различия между ними и определяет, какой из них лучше всего подходит для этой проблемы на основе этих различий.

Я понимаю, что объект Hashtable не может принимать нулевые значения

Итак, в ситуации, когда вам нужно сохранить нулевые значения, Hashtable не подходит.

Кроме того, в Hashtable перечисление не является отказоустойчивым. Поэтому, если вам нужно изменить содержание структуры при перечислении, более подходящим будет Hashtable.