В чем разница между 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
самые популярные.
Я нашел лекцию о принципах ООП, которая содержит ответ, который вы ищете:
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.