Разлика между HashMap и LinkedHashMap

HashMap и LinkedHashMap са две от най-често срещаните и общоприложени реализации на Map в платформата Java. Те са основно базирани на хеш класове, доста сходни помежду си и се използват за създаване на Карта. Интерфейсът на картата е последният от основните интерфейси на Framework на колекциите, който определя операциите, които се поддържат от набор от асоциации ключ-стойност, в които ключовете са уникални. Тези реализации на Map се базират на алгоритъм за хеширане. Докато класът HashMap реализира неподредени карти, класът LinkedHashMap реализира подредени карти. Реализацията LinkedHashMap е подклас на класа HashMap, което означава, че наследява характеристиките на класа HashMap. Няма голяма разлика между двете по отношение на производителността. Нека да разгледаме.

Какво е HashMap?

HashMap е една от най-често срещаните и сред четирите реализации с общо предназначение на интерфейса Map в Java, базирана на алгоритъм за хеширане. Той е аналогичен на зададения клас HashSet, въпреки че елементите са неподредени и в двата класа. Той е реализиран като хеш таблица, но за разлика от LinkedHashMap, той не поддържа никакъв ред на ключове или стойности. Като цяло, HashMap осигурява постоянна производителност за пут и get. Класът не е безопасен за нишки, но позволява един нулев ключ и множество нулеви стойности. Тъй като не поддържа итерационен ред, той изисква по-малко памет.



Какво е LinkedHashMap?

LinkedHashMap е сред четирите реализации с общо предназначение на интерфейса Map, който е подклас на класа HashMap, което означава, че наследява неговите характеристики. Въпреки че е много подобен на HashMap по отношение на производителността, с изключение на това, че поддържа реда за вмъкване на ключове, или в реда, в който ключовете се вмъкват в картата, или в реда, в който записите са достъпни в картата. Той усъвършенства договора на своя родителски клас, като гарантира реда, в който итераторите връщат неговите елементи. Той обаче изисква повече памет от HashMap, защото поддържа двойно свързан списък в Java.

Разлика между HashMap и LinkedHashMap

  1. Основи на HashMap Vs. LinkedHashMap

HashMap е базирана на хеш реализация на Map интерфейс в Java. Картите са колекция от двойки ключ-стойност и се използват, когато Списъците са в подредена колекция. HashMap е клас на колекция, който съхранява стойност в двойки ключ-стойност. С прости думи, той съпоставя ключовете със стойности, което означава, че може да намери стойност въз основа на ключ. LinkedHashMap е свързана списъчна реализация на интерфейса Map точно като HashMap, с изключение на това, че поддържа подрежданията на елементи, вмъкнати в него. Това е подклас на HashMap, който наследява неговите характеристики. LinkedHashMap прецизира договора на своя родителски клас, HashMap, като гарантира реда, в който итераторите връщат неговите елементи.

  1. Поръчка за повторение

Ключовата разлика между HashMap и LinkedHashMap е редът. Елементите на HashMap не са подредени, напълно случайни, докато елементите на LinkedHashMap са подредени. Записите на LinkedHashMap са в реда за вмъкване на ключове, което е редът, в който ключовете се вмъкват в картата. Това означава, че първият ключ, вмъкнат в Картата, се изброява първо, както и стойността, свързана с него, и последният запис, вмъкнат в изброения последен. LinkedHashMap има предсказуем ред на итерации, което означава, че може също така да поддържа елементите си в ред за достъп, който е редът, в който се влиза в записите.

  1. Изпълнение

Както класовете HashMap, така и LinkedHashMap използват хеширане за реализиране на интерфейс на Map в Java, с изключение на това, че HashMap е реализиран като хеш таблица, докато LinkedHashMap поддържа двойно свързан списък от сегменти, преминаващи през всички негови записи. Ето защо LinkedHashMap изисква повече памет от HashMap, защото за разлика от HashMap, той поддържа ред. Той премахва хаотичната поръчка от HashMap, без да носи допълнителни разходи, които биха били направени в противен случай с TreeMap. Освен това, класът LinkedHashMap е много подобен на класа HashMap в много аспекти, като синхронизация и нулеви ключове / стойности, тъй като и двата позволяват един нулев ключ и множество нулеви стойности.

  1. Изпълнение за HashMap Vs. LinkedHashMap

Въпреки че и двата класа осигуряват сравнима производителност, се смята, че класът HashMap е предпочитаният избор, ако поръчката не е проблем, тъй като не гарантира итерационния ред на картата. Операции като добавяне, премахване или намиране на записи въз основа на ключ са постоянно време, тъй като те хешират ключа. Така че добавянето, премахването и намирането на записи в LinkedHashMap може да бъде малко по-бавно, отколкото в HashMap, защото поддържа двойно свързан списък с кофи в Java. Освен това HashMap изисква по-малко памет от LinkedHashMap, тъй като не се поддържа ред.

HashMap срещу LinkedHashMap: Сравнителна диаграма

Резюме на HashMap Vs. LinkedHashMap

Докато класовете HashMap и HashMap са почти сходни по производителност, HashMap изисква по-малко памет от LinkedHashMap, защото не гарантира итерационния ред на картата, което прави добавянето, премахването и намирането на записи в HashMap сравнително по-бързо от това да правите същото с a LinkedHashMap. Ключовата разлика между двете обаче е в реда: елементите на HashMap не са в ред, докато елементите на LinkedHashMap по подразбиране са в реда за вмъкване на ключове, което означава реда, в който ключовете са вкарани в картата. LinkedHashMap може също така да поддържа елементите си в ред за достъп, което означава реда, в който са достъпни записите. Както при LinkedHashMap, трябва да се поддържа двойно свързан списък, той има по-ниска производителност от HashMap.