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

Какво е HashMap?

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

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

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

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

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

Обобщение на HashMap Vs. LinkedHashMap

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

Препратки

  • Кредит за изображение: https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Grepcode_Screenshot_HashMap.jpg/640px-Grepcode_Screenshot_HashMap.jpg
  • Кредит за изображение: https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Map_Classes.jpg/640px-Map_Classes.jpg
  • Нафталин, Морис и Филип Вадлер. Java Generics and Collections. Себастопол, Калифорния: O'Reilly Media, 2006. Печат
  • Могол, Халид Азим и Ролф В. Расмусен. Ръководство за програмист за сертифициране на Java. Бостън: Аддисън-Уесли, 2003. Печат
  • Фланаган, Дейвид. Java в ядка. Севастопол, Калифорния: O'Reilly Media, 2005. Печат