Различия между HashMap и HashTable в Java
Опубликовано: 2021-06-02Если вы изучаете Java и ее приложения, вы, должно быть, сталкивались с HashMap и HashTable. Оба они являются одними из самых важных классов в структуре Java Collection. Вы будете широко использовать их при разработке на Java, поэтому очень важно понимать их различия.
В следующих пунктах мы подробно рассмотрим тему HashTable и HashMap и объясним различия между ними:
Оглавление
Что такое ХэшМап?
HashMap был в коллекции Java с момента появления Java 1.2. Он позволяет вам выполнять базовые реализации интерфейса карты Java. HashMap хранит данные в парах (Key, Value), и для доступа к ним вам придется использовать индекс другого типа, например целое число.
Здесь вы используете один объект в качестве ключа (индекса) для другого объекта (значения), отсюда и использование пары (ключ, значение). Если вы добавите дубликат ключа, он заменит элемент соответствующего ключа.
Возможности HashMap
Чтобы понять различия между HashTable и HashMap, сначала вы должны понять их особенности. Это познакомит вас с основами обоих из них. HashMap имеет следующие особенности:
- Это часть пакета java.util.
- Он расширяет абстрактный класс AbstractMap, предоставляющий неполную реализацию интерфейса Map.
- Наряду с реализацией интерфейса Map, он также реализует интерфейсы Serializable и Cloneable.
- Он допускает дублирование значений, но не позволяет дублировать ключи. Это означает, что один ключ не может иметь более одного значения, но несколько ключей могут иметь одно значение.
- Вы можете использовать нулевой ключ только один раз в HashMap, но вы можете использовать несколько нулевых значений.
- Он не дает никаких гарантий относительно порядка карты, в частности, будет ли порядок оставаться постоянным с течением времени. HashMap почти похож на HashTable, но не синхронизирован.
- HashSet использует HashMap внутри.
Что такое хэш-таблица?
Вы используете класс HashTable для реализации хэш-таблицы, которая сопоставляет ключи со значениями. Здесь вы можете использовать ненулевые объекты в качестве ключа или значения. Имейте в виду, что для успешного хранения и извлечения объектов из хеш-таблицы объекты, используемые в качестве ключей, должны реализовывать метод hashCode и метод equals.
Хеш-таблица хранит данные в формате массива, и каждое значение данных имеет уникальное значение индекса. Это позволяет вам довольно быстро получить доступ к конкретным данным, если вы знаете требуемый индекс.
Особенности хеш-таблицы
HashTable имеет свои особенности, как и HashMap. Однако эти функции делают его уникальным и во многих отношениях отличным от HashMap:
- HashTable очень похож на HashMap, но синхронизирован.
- Он хранит пары ключ-значение в хеш-таблице.
- Здесь вы указываете объект, используемый в качестве ключа, и значение, которое вы хотите связать с ним. Затем вы хешируете ключ и используете сгенерированный хэш-код в качестве индекса, в котором вы сохраняете значение в таблице.
- Емкость класса Hashtable по умолчанию — 11, а коэффициент загрузки — 0,75.
- HashMap не предлагает перечисление, в то время как Hashtable не предлагает отказоустойчивое перечисление.
Различия между HashMap и HashTable
Теперь, когда вы знаете особенности HashMap и HashTable, мы сравним их и увидим заметные различия между ними:
HashMap | Хеш-таблица |
Он не синхронизирован. Вы не можете совместно использовать много потоков здесь без использования надлежащего кода синхронизации, потому что он не является потокобезопасным. | Он синхронизирован. Вы можете поделиться им со многими потоками, потому что он потокобезопасен. |
Он наследует класс AbstractMap. | Он наследует класс Dictionary. |
Здесь итератор падает быстро. | В HashTable Enumerator не работает быстро. |
Iterator пересекает HashMap. | Enumerator и Iterator проходят через HashTable. |
Вы можете синхронизировать HashMap, вызвав код Карта m = Collections.synchronizedMap(hashMap); | Хеш-таблицы синхронизируются внутри, и вы не можете рассинхронизировать их с помощью какого-либо кода. |
Это довольно быстро. | Это относительно медленнее, чем HashMap. |
HashMap — это новый класс, недавно представленный в JDK 1.2. | HashTable — это устаревший класс. |
Он допускает несколько нулевых значений и один нулевой ключ. | Он не допускает никаких нулевых значений или ключей. |
Пример кодирования
Ниже приведен пример работы HashMap и HashTable, чтобы вы могли понять различия между HashMap и HashTable.
Вход:
импортировать java.util.*;
импортировать java.lang.*;
импортировать java.io.*;
открытый класс JavaTester{
public static void main (String args []) {
Hashtable ht=новая Hashtable();
ht.put(1"Удай");
ht.put(1"Удджвал");
ht.put(2"Суммит");
ht.put(3,"Вижай");
System.out.println("————-Хеш-таблица—————");
Set<Integer> keySet = ht.keySet();
для (целочисленный ключ:набор ключей) {
System.out.println(key + ” “+ht.get(key));
}
HashMap hm=новый HashMap();
hm.put(0,"Удай");
хм.пут(4"Удай"); // у вас могут быть повторяющиеся значения в хэш-карте
hm.put(1"Суммит");
hm.put(2"Вижай");
System.out.println("————Хеш-карта————");
Set<Integer> keySet1 = ht.keySet();
для (целочисленный ключ:набор ключей) {
System.out.println(key + ” “+hm.get(key));
}
}
}
Выход:
Хеш-таблица:
3 Виджай
2 Сумит
1 Уджвал
Хэш-карта:
0 Удай
1 Сумит
2 Виджай
4 Удай
Когда использовать HashMap против HashTable?
Основным фактором, определяющим, будете ли вы использовать HashMap или HashTable, является синхронизация. Если вам нужна потокобезопасная задача, вам следует использовать HashTable, потому что все ее методы синхронизированы. Однако это устаревший класс, и вам следует избегать их.
Если у вас многопоточная среда, вам следует использовать ConcurrentHashMap, так как он очень похож на HashTable. Это позволяет правильно синхронизировать HashMap.
Синхронизированные операции снижают производительность, поэтому в большинстве случаев их следует избегать. Кроме того, HashMap подходит для непоточной среды, поэтому вы можете легко его использовать.
Изучайте онлайн-курсы по программному обеспечению от лучших университетов мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.
Заключение
HashMap и HashTable — популярные коды Java со схожими функциями. Однако, как вы можете видеть, между ними есть несколько заметных различий. HashMap — это класс Java, тогда как HashTable — это структура данных.
Если вы хотите узнать больше о Java и других языках программирования, мы рекомендуем ознакомиться с нашей программой Executive PG по разработке программного обеспечения со специализацией в разработке полного стека .
Что такое хеш-таблица?
Хеш-таблица — это контейнерная структура данных, которая широко используется в компьютерном программировании. Хеш-таблицы используются для хранения пар ключ-значение, где ключом может быть любой объект. В качестве контейнера хеш-таблица должна поддерживать операции вставки и удаления. В качестве инструмента поиска хэш-таблица должна поддерживать операцию get. Если предполагается, что хэш-таблица является структурой данных словаря, она также должна поддерживать операцию содержимого. Итак, в общем случае хэш-таблица — это структура данных, которая широко используется для эффективной реализации операций вставки, удаления, получения и содержания. Хеш-таблица широко используется из-за ее высокой производительности.
Что такое структура коллекций в Java?
Java Collections Framework — это набор интерфейсов, классов и алгоритмов для платформы Java. Он является частью платформы Java начиная с версии 1.2. Он включает в себя интерфейсы для контейнеров, списков, очередей и т. д., а также классы для обработки дат и времени, класс для обработки регулярных выражений, еще один для обработки интернационализации и еще один для обработки поиска в файлах.
Какова связь между хеш-таблицей и хэш-картой в Java?
Хеш-таблица — это специальная структура данных, которая связывает ключи со значениями. Ключи могут быть любыми объектами, но все ключи в данной хеш-таблице должны быть сопоставимы друг с другом (то есть использовать одинаковые или совместимые интерфейсы). В Java карта — это особый вид хэш-таблицы, реализованный с помощью TreeMap. Ключи в карте должны реализовывать метод equals, и карта использует этот метод, чтобы определить, равны ли два ключа или нет. Это означает, что в карте хранятся только ключи, и их связанное значение вычисляется всякий раз, когда это необходимо.