Razlika med HashMap in LinkedHashMap

HashMap in LinkedHashMap sta dve najpogostejši implementaciji zemljevida in splošne namene na platformi Java. V osnovi so tovrstni razredi, precej podobni drug drugemu in se uporabljajo za ustvarjanje Zemljevida. Vmesnik Map je zadnji od glavnih vmesnikov Collections Framework, ki definira operacije, ki jih podpira niz združenj ključ-vrednost, v katerih so ključi edinstveni. Te izvedbe zemljevida temeljijo na algoritmu mešanja. Medtem ko razred HashMap izvaja neurejene zemljevide, razred LinkedHashMap izvaja urejene zemljevide. Izvedba LinkedHashMap je podrazred razreda HashMap, kar pomeni, da podeduje lastnosti razreda HashMap. Razlika med obema ni v smislu uspešnosti. Oglejmo si.

Kaj je HashMap? 

HashMap je ena najpogostejših in med štirimi splošnimi izvedbami vmesnika Map na Javi, ki temelji na algoritmu mešanja. Je analogen nastavljenemu razredu HashSet, čeprav so elementi v obeh razredih neurejeni. Izvaja se kot hash tabela, vendar za razliko od LinkedHashMap ne vzdržuje nobenega reda na tipkah ali vrednostih. Na splošno HashMap zagotavlja konstantno uspešnost za "put and get". Razred ni navojen, vendar dovoljuje en null ključ in več ničelnih vrednosti. Ker ne vzdržuje vrstnega reda, potrebuje manj pomnilnika.

Kaj je LinkedHashMap?

LinkedHashMap je med štirimi splošnimi izvedbami vmesnika Map, ki je podrazred razreda HashMap, kar pomeni, da podeduje njegove lastnosti. Čeprav je glede na zmogljivost zelo podoben HashMap-u, le da vzdržuje vrstni red vstavljanja tipk, bodisi po vrstnem redu, po katerem so ključi vstavljeni v Zemljevid, bodisi po vrstnem redu dostopa do vnosov na zemljevidu. Poboljša pogodbo matičnega razreda z zagotavljanjem vrstnega reda, v katerem iteratorji vrnejo svoje elemente. Vendar pa potrebuje več pomnilnika kot HashMap, ker na Javi vzdržuje dvojno povezan seznam.

Razlika med HashMap in LinkedHashMap

  1. Osnove HashMap vs. LinkedHashMap

HashMap je na Jah temelječe izvajanje vmesnika Map. Zemljevidi so zbirka parov ključ-vrednost in se uporabljajo, ko so seznami v urejeni zbirki. HashMap je zbirka razred, ki shranjuje vrednost v pare ključ-vrednost. Preprosto povedano, preslika ključe na vrednosti, kar pomeni, da lahko poišče vrednost na podlagi ključa. LinkedHashMap je implementacija povezave s seznama vmesnika Map, tako kot HashMap, le da vzdržuje vrstni red elementov, vstavljenih vanj. Gre za podrazred HashMap, ki podeduje njegove značilnosti. LinkedHashMap izboljša pogodbo matičnega razreda HashMap z zagotavljanjem vrstnega reda, v katerem iteratorji vrnejo svoje elemente.

  1. Iteracijski ukaz

Ključna razlika med HashMapom in LinkedHashMapom je vrstni red. Elementi HashMap niso v vrstnem redu, povsem naključni, elementi LinkedHashMap pa so urejeni. Vnosi LinkedHashMap so v vrstnem redu vstavljanja ključev, to je vrstni red, v katerem so ključi vstavljeni v Zemljevid. To pomeni, da se najprej našteje prvi ključ, vstavljen v Zemljevid, prav tako vrednost, ki je z njim povezana, in zadnji vneseni zadnji. LinkedHashMap ima predvidljiv red ponovitve, kar pomeni, da lahko tudi vzdržuje svoje elemente v vrstnem redu dostopa, to je vrstni red, v katerem je dostop do vnosov.

  1. Izvajanje

Tako razredi HashMap kot LinkedHashMap uporabljajo hashing za izvajanje vmesnika Map v Javi, razen HashMap je implementiran kot tabela hash, medtem ko LinkedHashMap vzdržuje dvojno povezan seznam Buckets, ki teče skozi vse svoje vnose. Zato LinkedHashMap potrebuje več pomnilnika kot HashMap, ker za razliko od HashMap-a vzdržuje naročilo. Odstrani kaotično naročanje s strani HashMap-a, ne da bi pri tem nastali dodatni stroški, ki bi nastali drugače pri TreeMap-u. Poleg tega je razred LinkedHashMap zelo podoben razredu HashMap v številnih vidikih, kot so sinhronizacija in null tipke / vrednosti, saj omogočata en ničelni ključ in več ničelnih vrednosti.

  1. Zmogljivost za HashMap Vs. LinkedHashMap

Čeprav oba razreda zagotavljata primerljivo zmogljivost, se verjame, da je razred HashMap najboljša izbira, če naročanje ni problem, ker ne zagotavlja vrstnega reda karte na zemljevidu. Operacije, kot so dodajanje, odstranjevanje ali iskanje vnosov, ki temeljijo na ključu, so stalni čas, saj ključ ključi. Torej dodajanje, odstranjevanje in iskanje vnosov v LinkedHashMap je lahko nekoliko počasneje kot v HashMap-u, ker vzdržuje dvojno povezan seznam Buckets na Javi. Poleg tega HashMap potrebuje manj pomnilnika kot LinkedHashMap, ker ni vzdrževan vrstni red.

HashMap vs. LinkedHashMap: Primerjalna tabela

Povzetek HashMap Vs. LinkedHashMap

Medtem ko sta si razreda HashMap in HashMap po zmogljivostih skoraj podobna, HashMap potrebuje manj pomnilnika kot LinkedHashMap, ker ne zagotavlja zaporedja ponavljanja zemljevida, zaradi česar dodajanje, odstranjevanje in iskanje vnosov v HashMap postane relativno hitrejše, kot če počnete isto z LinkedHashMap. Ključna razlika med obema pa je vrstni red: elementi HashMap-a niso v redu, medtem ko so elementi LinkedHashMap-a po privzetem vrstnem redu vstavljanja ključev, kar pomeni vrstni red, v katerem so ključi vstavljeni v zemljevid. LinkedHashMap lahko tudi vzdržuje svoje elemente v vrstnem redu dostopa, kar pomeni vrstni red dostopa do vnosov. Tako kot pri LinkedHashMap mora biti tudi seznam z dvojno povezanim seznamom manjši, kot ima HashMap.