HashMap та LinkedHashMap - це дві найпоширеніші та загальноприйняті реалізації карти на платформі Java. В основному вони є хеш-класами, досить схожими між собою і використовуються для створення карти. Інтерфейс Map - це останній з основних інтерфейсів Collections Framework, який визначає операції, які підтримуються набором асоціацій «ключ-значення», в яких ключі унікальні. Ці реалізації Map засновані на алгоритмі хешування. У той час як клас HashMap реалізує не упорядковані карти, клас LinkedHashMap реалізує впорядковані карти. Реалізація LinkedHashMap - це підклас класу HashMap, що означає, що він успадковує особливості класу HashMap. Різниця між ними в плані продуктивності не велика. Давайте подивимось.
HashMap - одна з найпоширеніших та серед чотирьох реалізацій загального призначення інтерфейсу Map на Java на основі алгоритму хешування. Це аналогічно встановленому класу HashSet, хоча елементи не упорядковані в обох класах. Він реалізований у вигляді хеш-таблиці, але на відміну від LinkedHashMap, він не підтримує жодного порядку за ключами або значеннями. Загалом, HashMap забезпечує постійну продуктивність для роботи і отримання. Клас не є безпечним для потоків, але він дозволяє один нульовий ключ і кілька нульових значень. Оскільки він не підтримує ітераційний порядок, йому потрібно менше пам’яті.
LinkedHashMap входить до чотирьох загальних цілей реалізації інтерфейсу Map, який є підкласом класу HashMap, тобто він успадковує його особливості. Хоча він дуже схожий на HashMap з точки зору продуктивності, за винятком того, що він підтримує порядок вставки ключів, або в тому порядку, в якому ключі вставляються в Map, або в порядку, в якому доступ до записів здійснюється в Map. Він уточнює контракт свого батьківського класу, гарантуючи порядок, в якому ітератори повертають його елементи. Однак для цього потрібно більше пам'яті, ніж HashMap, оскільки він підтримує подвійний список на Java.
HashMap - це хеш-реалізація інтерфейсу Map на Java. Карти - це сукупність пар ключових значень і використовуються, коли списки впорядковані колекції. HashMap - це колекційний клас, який зберігає значення в парах ключ-значення. Простіше кажучи, він відображає ключі до значень, тобто він може знаходити значення на основі ключа. LinkedHashMap - реалізація пов'язаного списку інтерфейсу Map так само, як HashMap, за винятком того, що він підтримує порядки елементів, вставлених у нього. Це підклас HashMap, який успадковує його особливості. LinkedHashMap уточнює контракт свого батьківського класу, HashMap, гарантуючи порядок, в якому ітератори повертають його елементи.
Ключова різниця між HashMap і LinkedHashMap - це порядок. Елементи HashMap не в порядку, абсолютно випадкові, тоді як елементи LinkedHashMap впорядковані. Записи LinkedHashMap в порядку вставки ключів - це порядок введення ключів у Карта. Це означає, що перший ключ, вставлений у карту, перераховується першим, а також пов'язане з ним значення та останній запис, вставлений у перелічене останнє. LinkedHashMap має передбачуваний порядок ітерації, що означає, що він також може підтримувати свої елементи в порядку доступу, який є порядком, в якому доступ до записів.
І класи HashMap, і LinkedHashMap використовують хешування для реалізації інтерфейсу Map у Java, за винятком того, що HashMap реалізований як хеш-таблиця, тоді як LinkedHashMap підтримує подвійно пов'язаний список Buckets, що проходить через усі його записи. Ось чому LinkedHashMap вимагає більше пам'яті, ніж HashMap, оскільки на відміну від HashMap, він підтримує порядок. Це вилучає хаотичне замовлення HashMap, не несучи додаткових витрат, які могли б виникнути в іншому випадку з TreeMap. Крім того, клас LinkedHashMap дуже схожий на клас HashMap у багатьох аспектах, таких як синхронізація та нульові ключі / значення, оскільки обидва дозволяють один нульовий ключ і кілька нульових значень.
Хоча обидва класи забезпечують порівнянні показники, вважається, що клас HashMap є кращим вибором, якщо замовлення не є проблемою, оскільки це не гарантує порядку повторення Карти. Такі операції, як додавання, видалення або пошук записів на основі ключа, є постійним часом, оскільки вони хешують ключ. Тому додавання, видалення та пошук записів у LinkedHashMap може бути трохи повільніше, ніж у HashMap, оскільки він підтримує подвійно пов'язаний список Buckets на Java. Крім того, HashMap вимагає менше пам'яті, ніж LinkedHashMap, оскільки не підтримується порядок.
Хоча і класи HashMap, і HashMap майже схожі за продуктивністю, HashMap вимагає менше пам'яті, ніж LinkedHashMap, оскільки він не гарантує ітераційний порядок карти, що робить додавання, видалення та пошук записів у HashMap порівняно швидше, ніж робити те ж саме з LinkedHashMap. Однак ключовою різницею між ними є порядок: елементи HashMap не в порядку, в той час як елементи LinkedHashMap в порядку вставки ключів за замовчуванням означають порядок, в якому ключі вставляються в карту. LinkedHashMap також може підтримувати свої елементи в порядку доступу, тобто порядку, в якому мають доступ до записів. Як і в LinkedHashMap, список з подвійним зв'язком повинен підтримуватися, він має меншу продуктивність, ніж HashMap.