Різниця між HashMap і Hashtable на Java

Автор: Laura McKinney
Дата Створення: 2 Квітень 2021
Дата Оновлення: 5 Травень 2024
Anonim
Разница между HashMap и TreeMap Java собеседование
Відеоролик: Разница между HashMap и TreeMap Java собеседование

Зміст


Обидва HashMap і Hashtable використовуються для представлення а група об’єктів які представлені в Росії пари. Кожен пара називається Вступ об’єкт. The колекція Записів посилається на об’єкти HashMap та Hashtable. Ключі в колекції повинні бути унікальними або відмітними. Різниця між HashMap і Hashtable полягає в тому HashMap зокрема реалізує інтерфейс Map, тоді як Хештейн розширює клас Словник (спадковий клас), який реінжинірується для реалізації інтерфейсу Map. Інша важлива відмінність полягає в тому, що об’єкти HashMap є несинхронізований тоді як об'єкти Hashtable є синхронізований.

Перегляньмо порівняльну діаграму, представлену нижче, щоб дізнатися ще кілька відмінностей між HashMap і Hashtable.

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Схожість
  5. Висновок

Порівняльна діаграма

Основа для порівнянняHashMapХештейн
Впровадити / продовжитиКлас HashMap реалізує інтерфейс Map і розширює клас AbstractMap.Hashtable розширює клас Словник Legacy, але він перероблений заново і тепер також реалізує інтерфейс Map.
СинхронізаціяHashMap несинхронізований, а значить, об'єкт HashMap не є безпечним для потоків.Hashtable синхронізований, а значить, об'єкт Hashtable є безпечним для потоків.
Ключі / значенняКлюч може повернути Null лише один раз, але значення може повернути Null будь-яку кількість разів.Ключ не може повернути Null, оскільки він використовується для отримання хеш-коду, який буде використовуватися як індекс таблиці хешу, а також значення не може повернути Null.
Початкова потужність за замовчуваннямТипова початкова ємність HashMap - 16.Типова початкова ємність Hashtable - 11.
ПроїздHashMap проходить Iterator.Подібно до класу Map Hashtable також безпосередньо не підтримує Iterator для подорожі, а отже, він використовує Enumerator.


Визначення HashMap

HashMap - клас, який реалізує Карта інтерфейс і розширює Анотаційна карта клас використовує хеш-таблицю. Об'єкт HashMap відноситься до колекції / набору пара, де кожен ключ відображається на певне значення. Ключі в колекції повинні бути унікальними, оскільки вони використовуються для отримання значень. З іншого боку, значення в колекції можна дублювати. Декларація класу HashMap та конструкторів HashMapclass наступні:

/ * K являє собою ключ, а V являє собою значення * / клас HashMap / * Конструктори класу HashMap * / HashMap () HashMap (Map <? Розширює K,? Розширює V> m) HashMap (int місткість) HashMap (int місткість, float fillRatio)

Перший конструктор - це конструктор за замовчуванням, який ініціалізує порожній об’єкт HashMap з ємністю за замовчуванням 16 та коефіцієнтом заповнення за замовчуванням 0,75. Другий конструктор ініціалізує хеш-карту зі значенням m. Третій конструктор створює хеш-карту з початковою ємністю, що відповідає значенню, наведеному в аргументі "місткість". Четвертий конструктор ініціалізує хеш-карту з ємністю та коефіцієнтом заповнення, передбаченим у параметрах. давайте тепер дізнаємося, як подавати записи на хеш-карту.


Hashmap hm = новий Hashmap (); hm.put ("Аджай", 275); hm.put ("Vijay", 250); hm.put ("Джоні", 150); hm.put ("Йорданія", 200); System.out.ln (hm); / * вихід * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}

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

Визначення Hashtable

Хештел - клас, який розширює Словник клас, який є застарілим класом і реінжинірований для реалізації Карта інтерфейс. Hashtable використовує хеш-таблицю як свою структуру даних. Hashtable схожий на HashMap, оскільки тут також об’єкт Hashtable відноситься до колекції записів, де кожен запис є парою . Усі ключі в колекції повинні бути унікальними, з іншого боку, значення можна дублювати. Ключі особливо використовуються для отримання значення хеш-коду, яке визначає індекс, де - пара буде зберігатися в хеш-таблиці. У хеш-таблиці ні ключ, ні значення не можуть повернути Null pointer. Давайте подивимося на декларацію класу Hashtable та конструкторів класу хешбелів.

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

У наведеному вище коді перший конструктор - це конструктор за замовчуванням, який створює порожній об’єкт класу Hashtable, його розмір за замовчуванням - 11, а коефіцієнт заповнення за замовчуванням - 0,75. Другий конструктор створює хеш-таблицю з розміром, відповідним значенню, наведеному в параметрі «size». Третій конструктор створює хеш-таблицю з розміром і коефіцієнтом заповнення, передбаченими в параметрі. Четвертий конструктор ініціалізує хеш-таблицю зі значенням m. Давайте тепер навчимося вставляти пари в хеш-таблиці.

Hashtable ht = новий Hashtable (); ht.put (новий хеш-код (2), 275); ht.put (новий хеш-код (12), 250); ht.put (новий хеш-код (16), 150); ht.put (новий хеш-код (8), 200); System.out.ln (ht); / * вихід * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

У наведеному вище коді я створив порожній об’єкт Hashtable і вставив чотири записи методом put (). Внутрішній метод методу я назвав hashCode (), який обчислює і повертає значення хеш-коду, яке буде виконувати роль індексу об'єкта введення. Як ви бачите, я не згадував розмір хеш-таблиці, тому за замовчуванням він буде 11. Тут також порядок вставки не зберігається і, отже, коли редакторські записи не з’являлися в послідовності подачі.

  1. Реалізує HashMap Карта інтерфейс і розширює абстрактний клас, Анотаційна карта тоді як Hashtable розширює абстрактний клас Словник, який також є класом Legacy, пізніше перероблений для впровадження Карта інтерфейс.
  2. Об'єкт HashMap є несинхронізований тобто декілька потоків можуть працювати над ним одночасно, і, отже, це об’єкти, не безпечні для потоків. З іншого боку, об’єкти Hashtable є синхронізований тобто, якщо потік хоче оперувати об'єктом Hashtable, він повинен придбати замок на цьому об'єкті, щоб жодна інша нитка не могла отримати доступ до цього об'єкта, отже, він є безпечним для потоку.
  3. У HashMap ключ може повернутися Знесіть лише один раз, і значення може повернутися Онулюйте кілька разів. З іншого боку, ключ ніколи не може повернути Null, як раніше, щоб отримати значення хеш-коду, яке використовується як індекс для зберігання пара і значення ні можуть повернути Null.
  4. Типовою ємністю хеш-таблиці в класі HashMap є 16 тоді як ємність хеш-таблиці в Hashtable є типовою ємністю 11.
  5. The Ітератор може відміняти записи Hashmap. З іншого боку, Hashtable безпосередньо не підтримує Ітератор і, отже, взагалі Перелік використовується для переходу записів у Hashtable.

Подібність:

  • HashMap і Hashtable обидва використовують структуру даних хеш-таблиця.
  • HashMap і Hashtable обидва засоби Карта інтерфейс
  • Порядок вставки не збереглося і в HashMap, і в Hashtable і заснований на хеш-коді, отриманому за допомогою ключів.
  • У HashMap та Hashtable Ключі повинні бути унікальний тоді як значення можуть бути дублюється.
  • І HashMap, і Hashtable можуть містити неоднорідні об’єкти як для ключів, так і для значень.
  • HashMap і Hashtable, обидва засоби Серіалізація і Клоніруемый інтерфейси, але ні, випадковий доступ.
  • І HashMap, і Hashtable мають коефіцієнт заповнення за замовчуванням 0.75.
  • І HashMap, і Hashtable найкраще підходять для пошуку або пошук операції.

Висновок:

HashMap кращий по продуктивності, оскільки його об'єкти несинхронізовані, і багато потоків можуть працювати над ним одночасно, а значить, це швидше, ніж Hashtable.