HashMap a LinkedHashMap sú dve z najbežnejších a všeobecne použiteľných implementácií máp v platforme Java. V podstate ide o hašovacie triedy, ktoré sú si navzájom veľmi podobné a používajú sa na vytvorenie mapy. Rozhranie mapy je posledným z hlavných rozhraní kolekčného rámca, ktorý definuje operácie, ktoré sú podporované skupinou priradení kľúč-hodnota, v ktorých sú kľúče jedinečné. Tieto implementácie máp sú založené na algoritme hashovania. Zatiaľ čo trieda HashMap implementuje neusporiadané mapy, trieda LinkedHashMap implementuje objednané mapy. Implementácia LinkedHashMap je podtrieda triedy HashMap, čo znamená, že dedí vlastnosti triedy HashMap. Pokiaľ ide o výkon, medzi nimi nie je veľký rozdiel. Pozrime sa.
HashMap je jednou z najbežnejších a medzi štyrmi univerzálnymi implementáciami rozhrania Map v Java založených na algoritme hashovania. Je to analogické s nastavenou triedou HashSet, hoci prvky sú v oboch triedach neusporiadané. Je implementovaný ako hashova tabuľka, ale na rozdiel od LinkedHashMap neudržiava žiadne poradie kľúčov alebo hodnôt. HashMap vo všeobecnosti poskytuje výkon v nepretržitom čase pre putovanie a získavanie. Trieda nie je bezpečná pre vlákna, ale povoľuje jeden nulový kľúč a viac nulových hodnôt. Pretože neudržiava iteračný poriadok, vyžaduje menej pamäte.
LinkedHashMap je medzi štyrmi univerzálnymi implementáciami rozhrania Map, ktoré sú podtriedou triedy HashMap, čo znamená, že zdedila svoje vlastnosti. Hoci je to veľmi podobné HashMap, pokiaľ ide o výkon, s výnimkou toho, že zachováva poradie vkladania kľúčov, a to buď v poradí, v akom sú kľúče vložené do mapy, alebo v poradí, v akom sú prístupy k položkám v mape. Upravuje zmluvu svojej materskej triedy tým, že zaručuje poradie, v ktorom iterátori vracajú svoje prvky. Vyžaduje však viac pamäte ako HashMap, pretože v Jave vedie dvojnásobne prepojený zoznam.
HashMap je hašovacia implementácia mapového rozhrania v Jave. Mapy sú súborom párov kľúč - hodnota a používajú sa, keď sú zoznamy v usporiadanej zbierke. HashMap je trieda Zbierka, ktorá ukladá hodnotu do párov kľúč - hodnota. Jednoducho povedané, mapuje kľúče na hodnoty, čo znamená, že môže nájsť hodnotu na základe kľúča. LinkedHashMap je implementácia prepojeného zoznamu rozhrania mapy rovnako ako HashMap s tým rozdielom, že udržuje objednávky prvkov vložených do tohto rozhrania. Je to podtrieda HashMap, ktorá zdedí jej vlastnosti. LinkedHashMap spresňuje zmluvu svojej materskej triedy HashMap tým, že zaručuje poradie, v akom iterátor vráti svoje prvky.
Kľúčový rozdiel medzi HashMap a LinkedHashMap je poriadok. Prvky HashMap nie sú v poriadku, úplne náhodné, zatiaľ čo elementy LinkedHashMap sú usporiadané. Položky LinkedHashMap sú v poradí vloženia kľúčov, čo je poradie, v ktorom sú kľúče vložené do mapy. To znamená, že prvý kľúč vložený do mapy je spočítaný ako prvý, rovnako tak je priradená hodnota a posledný záznam vložený do zoznamu ako posledný. LinkedHashMap má predpovedateľné iteračné poradie, čo znamená, že môže tiež udržiavať svoje prvky v prístupovom poradí, čo je poradie, v ktorom sú prístupné záznamy..
Triedy HashMap aj LinkedHashMap používajú hashovanie na implementáciu mapového rozhrania v jazyku Java, s výnimkou toho, že HashMap je implementovaný ako hashova tabuľka, zatiaľ čo LinkedHashMap udržuje dvojnásobne prepojený zoznam segmentov, ktoré prechádzajú všetkými jeho položkami. To je dôvod, prečo LinkedHashMap vyžaduje viac pamäte ako HashMap, pretože na rozdiel od HashMap, udržuje objednávku. Odstraňuje chaotické usporiadanie pomocou HashMap bez toho, aby vznikli dodatočné náklady, ktoré by inak vznikli pri TreeMap. Okrem toho je trieda LinkedHashMap veľmi podobná triede HashMap v mnohých aspektoch, ako je synchronizácia a nulové kľúče / hodnoty, pretože obidve umožňujú nulovú a nulovú hodnotu viacerých hodnôt.
Aj keď obidve triedy poskytujú porovnateľný výkon, trieda HashMap sa považuje za preferovanú voľbu, ak objednávanie nie je problémom, pretože nezaručuje opakovaný poriadok mapy. Operácie, ako je pridávanie, odstraňovanie alebo nájdenie záznamov na základe kľúča, sú konštantným časom, pretože hashujú kľúč. Pridávanie, odstraňovanie a nájdenie záznamov v LinkedHashMap môže byť o niečo pomalšie ako v HashMap, pretože v Jave vedie dvojnásobne prepojený zoznam vedier. Navyše, HashMap vyžaduje menej pamäte ako LinkedHashMap, pretože sa neuchováva žiadna objednávka.
Zatiaľ čo triedy HashMap aj HashMap sú takmer podobné vo výkone, HashMap vyžaduje menej pamäte ako LinkedHashMap, pretože to nezaručuje opakujúce sa poradie mapy, vďaka čomu je pridávanie, odstraňovanie a nájdenie položiek v HashMap relatívne rýchlejšie ako to isté s LinkedHashMap. Kľúčový rozdiel medzi nimi je však poradie: prvky HashMap nie sú v poriadku, zatiaľ čo prvky linkedHashMap sú v predvolenom poradí v poradí vloženia kľúča, čo znamená poradie, v ktorom sú kľúče vložené do mapy. LinkedHashMap si tiež môže zachovať svoje prvky v prístupovom poradí, čo znamená poradie, v ktorom sa k položkám pristupuje. Podobne ako v prípade LinkedHashMap sa musí zachovať aj dvojnásobne prepojený zoznam, ktorý má nižší výkon ako HashMap.