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

Структура Java Collections пропонує набір класів колекції. Кожен клас має свої сильні та слабкі сторони у виконанні. Деякі з класів забезпечують повну реалізацію, яку можна використовувати як є. Інші - абстрактні, які надають скелетні реалізації, які використовуються як вихідні точки для створення колекцій. Реалізації колекції використовують рамку синхронізованої оболонки для забезпечення синхронізованих класів, інакше реалізації не синхронізовані. Кілька класів забезпечують реалізацію інтерфейсу карт.

Платформа Java містить три реалізації карти загального призначення: HashMap, TreeMap та LinkedHashMap. HashMap і Hashtable - це дві колекції на Java, які використовуються для зберігання пар ключів / значень у хеш-таблиці. Hashtable - це синхронізована карта, а HashMap - це несинхронізована карта. Тим не менш, якщо вам потрібно використовувати синхронізовану карту, Hashtable швидше, ніж використовувати HashMap в синхронізованій обгортці. Обидві колекції на основі хешу на Java, але вони мають неабияку частку відмінностей. Ми виділяємо деякі ключові відмінності між ними, щоб допомогти вам краще зрозуміти умови.

Що таке HashMap?

HashMap - це реалізація Map, заснована на хеш-таблиці, яка забезпечує постійну продуктивність для вставки та розміщення пар. Клас HashMap забезпечує реалізацію карти, яка базується на структурі даних Hashtable. Ця реалізація підтримує всі операції з картою та дозволяє отримати кілька нульових значень, але лише один нульовий ключ. Він використовує пари ключ / значення для зберігання значень у хеш-таблиці. Це несинхронізована карта, що означає, що вона не є безпечною для потоків і не може бути поділена між декількома потоками без належної синхронізації.

Що таке Hashtable?

На відміну від HashMap, Hashtable - це синхронізована карта, і вона є безпечною для потоків, а значить, її можна розділити між декількома потоками. У Hashtable ви вказуєте об'єкт, який можна використовувати як ключ, і значення, яке йде разом з ключем. Hashtable відображає ключі до значень за допомогою хеш-функції. Java надає цю функцію у вигляді методу хеш-коду () об'єкта, який переосмислює класи для надання відповідних хеш-кодів. На відміну від HashMap, Hashtable не підтримує нульові значення та null-ключі, тому що в реалізації методу put Hashtable є нульова перевірка..

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

  1. Основи HashMap Vs. Хешбел

Обидва - це колекції на основі хешів на Java, які використовуються для зберігання даних у парах ключ / значення. HashMap - це реалізація Map, заснована на хеш-таблиці, яка забезпечує постійну продуктивність для вставки та розміщення пар. Продуктивність може бути відрегульована за допомогою конструкторів, які дозволяють встановити коефіцієнт потужності та коефіцієнта навантаження хеш-таблиці. Основний Hashtable досить схожий на HashMap, навіть знижуючи назви методів. Він зберігає пару ключів / значень у хеш-таблиці. У Hashtable ви вказуєте об'єкт, який можна використовувати як ключ, і значення, яке йде разом з ключем.

  1. Синхронізація HashMap Vs. Хешбел

І HashMap, і Hashtable використовують хешируючі методи для зберігання значень на основі ключа. Як і HashMap, Hashtable використовує пари ключ / значення для зберігання значень у хеш-таблиці. Однак ключовою відмінністю між ними є синхронізація. HashMap - це несинхронізована карта, тоді як Hashtable - це синхронізована карта. Це означає, що HashMap не є безпечним для потоків і не може ділитися між декількома потоками без належного коду синхронізації. Навпаки, Hashtable є безпечним для потоків і може бути розподілений між декількома потоками. Hashtable швидше, ніж використання HashMap в синхронізованій обгортці, якщо вам потрібно використовувати синхронізовану карту.

  1. Нульові ключі та нульові значення для HashMap Vs. Хешбел

Клас HashMap забезпечує реалізацію карти, яка базується на структурі даних Hashtable. Ця реалізація підтримує всі операції з картою та дозволяє декілька значень нуля, але лише один нульовий ключ, щоб він міг підтримувати унікальні властивості ключа. Однак він не дає гарантій щодо порядку, в якому зберігаються записи. Hashtable, з іншого боку, відображає ключі до значень за допомогою хеш-функції. На відміну від HashMap, Hashtable не підтримує нульові значення та null-ключі, тому що в реалізації методу put Hashtable є нульова перевірка..

  1. Продуктивність HashMap Vs. Хешбел

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

HashMap проти Hashtable: Порівняльна діаграма

 

Підсумок HashMap Vs. Хешбел

Клас HashMap дає вам несортовану, не упорядковану карту. Отже, коли вам потрібна карта, і вам не байдуже, в якому порядку зберігаються записи, то HashMap - це шлях.

Як і вектор, Хештейл був з доісторичних часів Яви. Так само, як Vector є синхронізованим аналогом більш сучасного і вдосконаленого ArrayList, Hashtable - це синхронізований аналог HashMap. Однак клас не може бути синхронізований, тому коли ми говоримо, що Hashtable - це синхронізована карта, це означає, що ключові методи класу синхронізовані. 

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