HashMap и LinkedHashMap са две от най-често срещаните и общонационални реализации на картата в платформата Java. Те са основно базирани на хеш класове, доста сходни помежду си и се използват за създаване на карта. Интерфейсът на картата е последният от основните интерфейси на 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 използват хеширане, за да внедрят интерфейс на карта в Java, с изключение на HashMap се реализира като хеш таблица, докато LinkedHashMap поддържа двойно свързан списък на Buckets, преминаващ през всичките му записи. Ето защо LinkedHashMap изисква повече памет от HashMap, защото за разлика от HashMap, той поддържа поръчка. Той премахва хаотичната поръчка от HashMap, без да прави допълнителни разходи, които биха били направени в противен случай с TreeMap. Освен това класът LinkedHashMap е много подобен на класа HashMap в много аспекти като синхронизация и нулеви ключове / стойности, тъй като и двете позволяват един нулев ключ и множество нулеви стойности.
Въпреки че и двата класа осигуряват сравнителна производителност, се смята, че класът HashMap е предпочитаният избор, ако поръчката не е проблем, тъй като не гарантира реда за повторение на картата. Операции като добавяне, премахване или намиране на записи въз основа на ключ са постоянно време, тъй като те хешират ключа. Така че добавянето, премахването и намирането на записи в LinkedHashMap може да бъде малко по-бавно, отколкото в HashMap, защото поддържа двойно свързан списък на Buckets в Java. Освен това HashMap изисква по-малко памет от LinkedHashMap, защото не се поддържа ред.
Докато и класовете HashMap и HashMap са почти сходни по производителност, HashMap изисква по-малко памет от LinkedHashMap, тъй като не гарантира реда за повторение на картата, което прави добавянето, премахването и намирането на записи в HashMap сравнително по-бързо, отколкото да правите същото с a LinkedHashMap. Ключовата разлика между двете обаче е ред: елементите на HashMap не са в ред, докато елементите на LinkedHashMap са в ред на въвеждане на ключове по подразбиране, което означава реда, в който ключовете се вмъкват в картата. LinkedHashMap също може да поддържа елементите си в ред за достъп, което означава реда, в който се осъществява достъп до записите. Както при LinkedHashMap, трябва да се поддържа двойно свързан списък, той има по-малка производителност от HashMap.