HashMap at LinkedHashMap

Anonim

Ang HashMap at LinkedHashMap ay dalawa sa pinaka-karaniwang at pangkalahatang layunin ng Mga pagpapatupad ng Mapa sa platform ng Java. Ang mga ito ay karaniwang mga klase ng hash na nakabatay, katulad ng bawat isa at ginagamit para sa paglikha ng isang Mapa. Ang interface ng Map ay ang huling ng mga pangunahing mga interface ng Framework ng Mga Koleksyon na tumutukoy sa mga operasyon na sinusuportahan ng isang hanay ng mga susi sa halaga na mga asosasyon kung saan ang mga susi ay natatangi. Ang mga pagpapatupad ng Mapa ay batay sa isang hashing algorithm. Habang ang klase ng HashMap ay nagpapatupad ng mga unordered na mapa, ang klase na LinkedHashMap nagpapatupad ng mga naka-order na mga mapa. Ang pagpapatupad ng LinkedHashMap ay isang subclass ng klase ng HashMap na nangangahulugang nagmamana nito ang mga tampok ng klase ng HashMap. Walang gaanong pagkakaiba sa pagitan ng dalawang sa mga tuntunin ng pagganap. Tignan natin.

Ano ang HashMap?

Ang HashMap ay isa sa mga pinaka-karaniwan at kabilang sa apat na pangkalahatang-layunin na pagpapatupad ng Map interface sa Java batay sa isang hashing algorithm. Ito ay kahalintulad sa hanay ng klase HashSet, bagaman, ang mga elemento ay hindi nakaayos sa parehong klase. Ito ay ipinatupad bilang isang hash table ngunit hindi katulad ng LinkedHashMap, hindi nito pinanatili ang anumang order sa mga key o halaga. Sa pangkalahatan, ang HashMap ay nagbibigay ng pare-pareho na pagganap para sa pagkakalagay at pagkuha. Ang klase ay hindi thread-safe ngunit pinapayagan nito ang isang null key at maraming null halaga. Dahil hindi nito pinanatili ang isang iterating order, ito ay nangangailangan ng mas memorya.

Ano ang LinkedHashMap?

Ang LinkedHashMap ay kabilang sa apat na pagpapatupad ng pangkalahatang layunin ng interface ng Map na isang subclass ng klase ng HashMap na nangangahulugang nagmamana ng mga tampok nito. Kahit na ito ay halos katulad sa HashMap sa mga tuntunin ng pagganap, maliban kung ito ay nagpapanatili ng insertion order ng mga key, alinman sa pagkakasunud-sunod kung saan ang mga key ay ipinasok sa Mapa o ang pagkakasunud-sunod kung saan ang mga entry ay ma-access sa Map. Nililinaw nito ang kontrata ng klase ng magulang nito sa pamamagitan ng paggarantiya ng pagkakasunud-sunod kung saan ang mga iterator ay nagbabalik ng mga elemento nito. Gayunpaman, ito ay nangangailangan ng mas maraming memorya kaysa sa isang HashMap dahil ito ay nagpapanatili ng doble-linked na listahan sa Java.

Pagkakaiba sa pagitan ng HashMap at LinkedHashMap

  1. Mga Pangunahing Kaalaman ng HashMap Vs. LinkedHashMap

Ang HashMap ay isang hash-based na pagpapatupad ng Map interface sa Java. Ang mga mapa ay isang koleksyon ng mga pares na key-value at ginagamit kapag ang Mga Listahan ay nasa naka-order na koleksyon. Ang HashMap ay isang Collection class na nag-iimbak ng halaga sa mga pares ng key-value. Sa simpleng mga termino, ito ay naglalagay ng mga susi sa mga halaga na nangangahulugan na maaari itong makahanap ng isang halaga batay sa isang susi. Ang LinkedHashMap ay isang pagpapatupad ng naka-link na listahan ng interface ng Map tulad ng HashMap maliban sa ito ay nagpapanatili ng mga order ng mga elemento na ipinasok dito. Ito ay isang subclass ng HashMap na nagmamana ng mga tampok nito. Tinitingnan ng LinkedHashMap ang kontrata ng klase ng magulang nito, ang HashMap, sa pamamagitan ng paggarantiya ng pagkakasunud-sunod kung saan ang mga iterator ay nagbabalik ng mga elemento nito.

  1. Iteration Order

Ang pangunahing pagkakaiba sa pagitan ng HashMap at LinkedHashMap ay ang order. Ang mga elemento ng isang HashMap ay hindi sa pagkakasunud-sunod, ganap na random, samantalang ang mga elemento ng LinkedHashMap ay iniutos. Ang mga entry ng isang LinkedHashMap ay nasa key insertion order, na kung saan ay ang pagkakasunud-sunod kung saan ang mga key ay ipinasok sa Map. Nangangahulugan ito na ang unang key na ipinasok sa Mapa ay unang binanggit, gayon din ang halaga na nauugnay dito, at ang huling entry na ipinasok sa nabanggit na huling. Ang LinkedHashMap ay may predictable order na pag-ulit na nangangahulugang maaari rin itong mapanatili ang mga elemento nito sa access order, na kung saan ay ang pagkakasunud-sunod kung saan ang mga entry ay na-access.

  1. Pagpapatupad

Ang parehong mga klase ng HashMap at LinkedHashMap ay gumagamit ng hashing upang maipatupad ang Map interface sa Java maliban sa HashMap ay ipinatupad bilang isang talahanayan ng hash kung saan ang LinkedHashMap ay nagpapanatili ng doble na naka-link na listahan ng mga Bucket na tumatakbo sa lahat ng mga entry nito. Ito ang dahilan kung bakit nangangailangan ang LinkedHashMap ng mas maraming memorya kaysa sa HashMap dahil hindi katulad ng HashMap, pinapanatili nito ang isang order. Inaalis nito ang magulong pag-order ng HashMap, nang hindi sinasadya ang karagdagang gastos na maaaring natamo kung hindi man sa TreeMap. Bukod sa na, ang klase ng LinkedHashMap ay halos kapareho sa klase ng HashMap sa maraming aspeto tulad ng pag-synchronize at mga null key / value bilang parehong nagpapahintulot sa isang null key at maraming null value.

  1. Pagganap para sa HashMap Vs. LinkedHashMap

Bagaman, ang parehong mga klase ay nagkakaloob ng maihahambing na pagganap, ang HashMap class ay pinaniniwalaan na ang ginustong pagpipilian kung ang pag-order ay hindi isang isyu dahil hindi ito ginagarantiyahan sa pag-ulit ng order ng Mapa. Ang mga operasyon tulad ng pagdaragdag, pag-alis, o paghahanap ng mga entry batay sa isang susi ay pare-pareho ang oras, habang ang mga ito ay ang susi. Kaya pagdaragdag, pag-alis, at paghahanap ng mga entry sa isang LinkedHashMap ay maaaring bahagyang mas mabagal kaysa sa isang HashMap dahil ito ay nagpapanatili ng doble-linked na listahan ng mga Bucket sa Java. Karagdagan pa, ang HashMap ay nangangailangan ng mas kaunting memorya kaysa sa LinkedHashMap dahil walang pinapanatili ang order.

HashMap kumpara sa LinkedHashMap: Tsart ng Paghahambing

Buod ng HashMap Vs. LinkedHashMap

Habang ang parehong mga klase ng HashMap at HashMap ay halos kapareho sa pagganap, ang HashMap ay nangangailangan ng mas kaunting memory kaysa sa isang LinkedHashMap dahil hindi ito ginagarantiya ang iterating order ng mapa, na ginagawang pagdaragdag, pag-alis, at paghahanap ng mga entry sa isang HashMap na mas mabilis kaysa sa paggawa nito isang LinkedHashMap. Gayunpaman, ang pangunahing pagkakaiba sa pagitan ng dalawa ay ang order: ang mga elemento ng isang HashMap ay hindi sa order, habang ang mga elemento ng isang LinkedHashMap ay nasa key insertion order sa pamamagitan ng default na kahulugan ang pagkakasunud-sunod kung saan ang mga key ay ipinasok sa mapa. Maaari ring mapanatili ng LinkedHashMap ang mga elemento nito sa access order na nangangahulugan ng pagkakasunud-sunod kung saan ma-access ang mga entry.Tulad ng LinkedHashMap, kailangang i-maintain ang listahan na doble-linked, mas mababa ito kaysa sa HashMap.