В чем разница между Hashtable и Dictionary?

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

7 ответов


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


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

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

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

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

Примечание: этот класс устарел. Новые реализации должны реализовать карта интерфейс, а не расширение этого класса.


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

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

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


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

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


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

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

EDIT:

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

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


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


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

Примечание: этот класс устарел. Новые реализации должны реализовать Интерфейс карты, а не расширение этого класса.

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