Разница между HashMap и Hashtable в Java

Автор: Laura McKinney
Дата создания: 2 Апрель 2021
Дата обновления: 5 Май 2024
Anonim
14.11 HashMap and HashTable in Java
Видео: 14.11 HashMap and HashTable in Java

Содержание


HashMap и Hashtable, оба используются для представления группа объектов которые представлены в пара. каждый пара называется запись объект. коллекция Записи ссылается на объект HashMap и Hashtable. Ключи в коллекции должны быть уникальными или отличительными. Разница между HashMap и Hashtable заключается в том, что HashMap в частности, реализует интерфейс Map, тогда как Хеш-таблица расширяет класс Dictionary (унаследованный класс), который был переработан для реализации интерфейса Map. Другое важное отличие состоит в том, что объекты HashMap синхронизирован в то время как объекты Hashtable синхронизированный.

Давайте посмотрим на диаграмму сравнения, показанную ниже, чтобы узнать больше различий между HashMap и Hashtable.

  1. Сравнительная таблица
  2. Определение
  3. Ключевые отличия
  4. сходства
  5. Заключение

Сравнительная таблица

Основа для сравненияHashMapХеш-таблица
Внедрить / расширитьКласс HashMap реализует интерфейс Map и расширяет класс AbstractMap.Hashtable расширяет класс Dictionary Legacy, но он переработан и теперь также реализует интерфейс Map.
синхронизацияHashMap не синхронизирован, и, следовательно, объект HashMap не является поточно-ориентированным.Hashtable синхронизируется, и, следовательно, объект Hashtable является потокобезопасным.
Ключи / ValueКлюч может вернуть Null только один раз, но значение может вернуть Null любое количество раз.Ключ не может вернуть Null, поскольку он используется для получения хеш-кода, который будет использоваться в качестве индекса хеш-таблицы, а значение не может возвращать Null.
Начальная емкость по умолчаниюНачальная емкость по умолчанию HashMap составляет 16.Начальная емкость по умолчанию Hashtable составляет 11.
ОбходHashMap просматривается итератором.Как и класс Map, Hashtable также напрямую не поддерживает Iterator для обхода и, следовательно, использует Enumerator.


Определение HashMap

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

/ * K представляет ключ, а V представляет значение * / class HashMap / * Конструкторы класса HashMap * / HashMap () HashMap (Карта <? Расширяет K,? Расширяет V> м) HashMap (intacity) HashMap (intacity, float fillRatio)

Первый конструктор является конструктором по умолчанию, который инициализирует пустой объект HashMap с емкостью по умолчанию 16 и коэффициентом заполнения по умолчанию 0,75. Второй конструктор инициализирует хэш-карту со значением m. Третий конструктор создает хэш-карту с начальной емкостью, соответствующей значению, указанному в аргументе «емкость». Четвертый конструктор инициализирует хэш-карту с емкостью и коэффициентом заполнения, указанными в параметрах. давайте теперь узнаем, как кормить записи в хэш-карте.


Hashmap hm = new Hashmap (); hm.put («Аджай», 275); hm.put («Виджай», 250); hm.put («Джонни», 150); hm.put («Джордан», 200); System.out.ln (хм); / * вывод * / {Виджай = 250, Джонни = 150, Аджай = 275, Иордания = 200}

В приведенном выше коде вы можете видеть, что я создал пустой объект HashMap гм с начальной емкостью по умолчанию и коэффициентом заполнения по умолчанию. Затем я вставил четыре записи в хеш-карту, используя метод put (K, V), который сопоставляет ключ со значением. Вы можете заметить, что записи не редактируются в последовательности, которую вы вводите, потому что порядок вставки не фиксирован. Теперь рассмотрим случай, когда у вас уже есть запись в хэш-карте, и после этого вы пытаетесь вставить put (K1, V5), т.е. вы пытаетесь сопоставить тот же ключ с другим значением. Затем метод put заменяет старое значение V1 новым значением V2 и возвращает старое значение V1, в противном случае, если мы никогда не пытаемся заменить значение ключа, метод put возвращает для этого ключа значение Null.

Определение хэш-таблицы

Hashtable это класс, который расширяет Словарь класс, который является унаследованным классом и реинжиниринг для реализации карта интерфейс. Hashtable использует хеш-таблицу в качестве своей структуры данных. Hashtable похож на HashMap, поскольку здесь также объект Hashtable относится к коллекции записей, где каждая запись представляет собой пару , С другой стороны, все ключи в коллекции должны быть уникальными, значения могут быть продублированы. Ключи особенно используются для получения значения хеш-кода, которое определяет индекс, где пара будет храниться в хеш-таблице. В хеш-таблице ни ключ, ни значение не могут возвращать нулевой указатель. Давайте посмотрим объявление класса Hashtable и конструкторов класса hashtable.

/ * K указывает ключ, а V указывает значение, связанное с ключом * / class Hashtable / * конструкторы Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? расширяет K,? расширяет V> m)

В приведенном выше коде первый конструктор является конструктором по умолчанию, который создает пустой объект класса Hashtable, его размер по умолчанию равен 11, а коэффициент заполнения по умолчанию равен 0,75. Второй конструктор создает хеш-таблицу с размером, соответствующим значению, указанному в параметре «размер». Третий конструктор создает хеш-таблицу с размером и коэффициентом заполнения, указанными в параметре. Четвертый конструктор инициализирует хеш-таблицу значением m. Давайте теперь узнаем, как вставить пара в хеш-таблице.

Hashtable ht = new Hashtable (); ht.put (новый hashCode (2), 275); ht.put (новый hashCode (12), 250); ht.put (новый hashCode (16), 150); ht.put (новый hashCode (8), 200); System.out.ln (ht); / * вывод * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

В приведенном выше коде я создал пустой объект Hashtable и вставил четыре записи, используя метод put (). Внутри метода put я вызвал hashCode (), который вычисляет и возвращает значение хеш-кода, которое будет действовать как значение индекса для объекта ввода. Как вы можете видеть, я не упомянул размер хеш-таблицы, поэтому по умолчанию он будет равен 11. Здесь также порядок вставки не сохраняется и, следовательно, когда записи ed не появлялись в последовательности, они передавались.

  1. HashMap реализует карта интерфейс и расширяет абстрактный класс, AbstractMap в то время как Hashtable расширяет абстрактный класс Словарь, который также является классом Legacy, позже реинжиниринг для реализации карта интерфейс.
  2. Объект HashMap синхронизирован то есть несколько потоков могут работать с ним одновременно, и, следовательно, он не является потокобезопасным. С другой стороны, объектами Hashtable являются синхронизированный то есть, если поток хочет работать с объектом Hashtable, он должен получить блокировку этого объекта, чтобы никакой другой поток не мог получить доступ к этому объекту, и, следовательно, он безопасен для потока.
  3. В HashMap ключ можно вернуть Null только один рази значение может вернуть Null несколько раз, С другой стороны, ключ никогда не может вернуть Null, так как он использовался для получения значения хеш-кода, которое используется в качестве индекса для хранения Пара и ни значение не могут вернуть Null.
  4. Емкость по умолчанию для хеш-таблицы в классе HashMap: 16 тогда как емкость хеш-таблицы по умолчанию в Hashtable равна 11.
  5. Итератор может проходить записи Hashmap. С другой стороны, Hashtable напрямую не поддерживает итератор и, следовательно, обычно счетчик используется для обхода записей в Hashtable.

сходства:

  • HashMap и Hashtable оба используют структуру данных хеш-таблица.
  • HashMap и Hashtable оба реализуют карта интерфейс
  • Порядок вставки не сохраняется в обоих HashMap и Hashtable и на основе хеш-кода, полученного с использованием ключей.
  • В HashMap и Hashtable ключи должны быть уникальный тогда как значения могут быть дублированный.
  • HashMap и Hashtable оба могут содержать гетерогенные объекты для обоих ключей и значений.
  • HashMap и Hashtable, оба инструмента Сериализуемый а также Cloneable интерфейсы но нет, произвольный доступ.
  • HashMap и Hashtable оба имеют коэффициент заполнения по умолчанию 0.75.
  • HashMap и Hashtable оба лучше всего подходят для поиска или поиск операции.

Заключение:

HashMap лучше работает, поскольку его объекты не синхронизированы, и несколько потоков могут работать с ним одновременно, и, следовательно, он работает быстрее, чем Hashtable.