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

Какая разница между Hashtable и Dictionary?

В чем разница между Dictionary и Hashtable и как работать с классом Dictionary в Java?

4b9b3361

Ответ 1

Dictionary является абстрактным базовым классом Hashtable. Оба они все еще находятся в JDK для обратной совместимости со старым кодом. Мы ожидаем использовать HashMap и другие реализации интерфейса Map, введенные в Java 1.2.

Ответ 2

У javadoc для Dictionary есть ваш ответ.

Класс Dictionary является абстрактным родителем любого класса, например Hashtable, который сопоставляет ключи значениям.

Вы не работаете непосредственно с Dictionary, так как это класс abstract.

Также обратите внимание на следующее из той же документации:

ПРИМЕЧАНИЕ. Этот класс устарел. Новые реализации должны реализовывать интерфейс Map, а не расширять этот класс.

Ответ 3

Dictionary является абстрактным классом, суперклассом Hashtable. Вы не должны использовать Dictionary, поскольку это устаревшее. Что касается Hashtable, то преимущество над другими картами, такими как HashMap, было безопасностью потоков, но с введением ConcurrentHashMap с Java 1.5 нет реальной причины использовать его больше - см. javadoc

Начиная с платформы Java 2 v1.2, этот класс был модернизирован для реализации интерфейса Map, что делает его членом Framework коллекций Java. В отличие от новых реализаций коллекции, Hashtable синхронизируется. Если потоковая реализация не нужна, рекомендуется использовать HashMap вместо Hashtable. Если требуется поточнобезопасная высококонкурентная реализация, тогда вместо Hashtable рекомендуется использовать ConcurrentHashMap.

Вкратце. Не используйте Dictionary или Hashtable, если вам действительно не нужно по соображениям совместимости, используйте либо HashMap, если вам не нужна безопасность потоков, или ConcurrentHashMap если ваша карта используется в параллельной среде.

Ответ 4

Hashtable представляет собой реализацию Dictionary. Вы не можете использовать Dictionary напрямую, потому что это абстрактный класс.

Но вы не должны использовать либо потому, что они были заменены интерфейсом Map и классами реализации, из которых HashMap является наиболее популярным.

Ответ 5

Я нашел лекцию о принципах ООП, в которой содержится ответ, который вы ищете:

http://www.clear.rice.edu/comp202/04-fall/lectures/lec23/

EDIT:

СловарьОсновной темой в области вычислений является тема хранения/поиска/удаления: хранить данные где-то, чтобы впоследствии их можно было извлечь и отбросить, если они больше не нужны, все это наиболее эффективным образом. Абстракция этих вычислительных действий воплощена в понятии того, что называется словарем, выраженным в Java как интерфейс следующим образом.

Хэш-таблицы    Хэш-таблица является обобщением обычного массива.     Когда количество фактически сохраненных ключей относительно общего количества возможных ключей, хеш-таблицы становятся эффективными альтернатива прямой адресации массива, поскольку хеш-таблица обычно использует массив размера, пропорциональный количеству ключей фактически хранится.     Вместо того, чтобы напрямую использовать ключ в качестве индекса массива, индекс массива вычисляется из ключа.     С хэшированием элемент с ключом k сохраняется в слоте h (k); т.е. хэш-функция h используется для вычисления слота из ключа k.     h отображает множество U ключей в слоты хэш-таблицы T [0..m-1]:         h: U → {0, 1,..., m - 1}

Ответ 6

Класс Dictionary является абстрактным родителем любого класса, например Hashtable, который сопоставляет ключи значениям. Каждый ключ и каждое значение являются объектами. В любом объекте Dictionary каждый ключ связан не более чем с одним значением. Учитывая словарь и ключ, связанный элемент можно просмотреть. Любой ненулевой объект может использоваться как ключ и как значение.

Ответ 7

Согласно javadocs для словаря:

ПРИМЕЧАНИЕ. Этот класс устарел. Новые реализации должны Интерфейс карты, а не расширение этого класса.

Hashtable - это старинный JDK 1.0. Вы должны предпочесть интерфейс Map и его более современные реализации: HashMap и TreeMap.