Diferența dintre HashMap și LinkedHashMap

HashMap și LinkedHashMap sunt două dintre cele mai comune și generale de implementare a hărților în platforma Java. Ele sunt în esență clase bazate pe hash, destul de asemănătoare cu altele și sunt utilizate pentru crearea unei hărți. Interfața hărții este ultima dintre cele mai importante interfețe pentru colecții-cadru care definește operațiile care sunt suportate de un set de asocieri cheie-valoare în care cheile sunt unice. Aceste implementări ale hărții se bazează pe un algoritm de hashing. În timp ce clasa HashMap implementează hărți neordonate, clasa LinkedHashMap implementează hărți comandate. Implementarea LinkedHashMap este o subclasă a clasei HashMap, ceea ce înseamnă că moștenește caracteristicile clasei HashMap. Nu există o mare diferență între cele două în termeni de performanță. Hai să aruncăm o privire.

Ce este HashMap? 

HashMap este una dintre cele mai comune și printre cele patru implementări generale ale interfeței Map în Java pe baza unui algoritm de hashing. Este analog cu clasa setată HashSet, deși elementele sunt neordonate în ambele clase. Este implementat ca o tabelă hash dar, spre deosebire de LinkedHashMap, nu menține nicio comandă pe chei sau valori. În general, HashMap oferă performanțe în timp constant pentru a pune și a obține. Clasa nu este sigură în legătură cu firul, dar permite o cheie nulă și valori multiple nul. Deoarece nu menține o ordine iteratoare, aceasta necesită mai puțină memorie.

Ce este LinkedHashMap?

LinkedHashMap se numără printre cele patru implementări generale ale interfeței Map, care este o subclasă a clasei HashMap, ceea ce înseamnă că ea moștenește caracteristicile sale. Deși este foarte asemănător cu HashMap în ceea ce privește performanța, cu excepția faptului că menține ordinea de introducere a cheilor, fie în ordinea în care cheile sunt inserate în Hartă, fie în ordinea în care intrările sunt accesate în Hartă. Îmbunătățește contractul clasei părinte garantând ordinea în care iteratorii returnează elementele sale. Cu toate acestea, aceasta necesită mai multă memorie decât un HashMap deoarece menține o listă dublu legată în Java.

Diferența dintre HashMap și LinkedHashMap

  1. Bazele de HashMap Vs. LinkedHashMap

HashMap este o implementare bazată pe hash a interfeței Map în Java. Hărțile reprezintă o colecție de perechi cheie-valoare și sunt utilizate atunci când listele sunt în colecția ordonată. HashMap este o clasă de colecții care stochează valoarea în perechi cheie-valoare. În termeni simpli, acesta reprezintă hărți pentru valori, ceea ce înseamnă că poate localiza o valoare bazată pe o cheie. LinkedHashMap este o implementare a listei legate de interfața hărții, la fel ca HashMap, cu excepția faptului că menține ordine de elemente inserate în ea. Este o subclasă a HashMap care îi moștenește trăsăturile. LinkedHashMap îmbunătățește contractul clasei părinte, HashMap, garantând ordinea în care iteratorii returnează elementele sale.

  1. Ordin de Iterare

Diferența cheie dintre HashMap și LinkedHashMap este ordinea. Elementele unui HashMap nu sunt în ordine, total aleatorii, în timp ce sunt comandate elemente ale LinkedHashMap. Intrările unui LinkedHashMap sunt în ordinea inserării cheilor, care este ordinea în care sunt inserate cheile în Hartă. Aceasta înseamnă că prima cheie introdusă în hartă este enumerată mai întâi, la fel și valoarea asociată cu ea, iar ultima intrare introdusă în ultimul enumerat. LinkedHashMap are o comandă de iterație previzibilă, ceea ce înseamnă că își poate menține elementele în ordinea accesării, adică ordinea în care sunt accesate intrările.

  1. Punerea în aplicare

Ambele clase HashMap și LinkedHashMap utilizează hashing pentru a implementa interfața Map în Java, cu excepția faptului că HashMap este implementat ca o tabelă hash, în timp ce LinkedHashMap menține o listă dublată de Buckets care rulează prin toate intrările. Acesta este motivul pentru care LinkedHashMap necesită mai multă memorie decât HashMap deoarece, spre deosebire de HashMap, acesta menține o comandă. Elimină ordonarea haotică de către HashMap, fără a suporta costul suplimentar care ar fi fost suportat altfel cu TreeMap. În plus, clasa LinkedHashMap este foarte asemănătoare cu clasa HashMap în multe aspecte, cum ar fi sincronizarea și cheile / valorile null, deoarece ambele permit o cheie nulă și mai multe valori nula.

  1. Performanță pentru HashMap Vs. LinkedHashMap

Deși ambele clase oferă performanțe comparabile, clasa HashMap se consideră a fi alegerea preferată dacă ordonarea nu este o problemă deoarece nu garantează ordinea iteratoare a hărții. Operațiile cum ar fi adăugarea, eliminarea sau găsirea intrărilor pe baza unei chei sunt timp constanți, deoarece acestea au hash cheie. Așadar, adăugarea, eliminarea și găsirea intrărilor într-un LinkedHashMap poate fi ușor mai lentă decât într-un HashMap deoarece menține o listă dublă de Buckets în Java. În plus, HashMap necesită mai puțină memorie decât LinkedHashMap deoarece nu se menține nicio comandă.

HashMap vs. LinkedHashMap: Graficul comparației

Rezumat al HashMap Vs. LinkedHashMap

În timp ce clasele HashMap și HashMap sunt aproape similare în performanță, HashMap necesită mai puțină memorie decât un LinkedHashMap deoarece nu garantează ordinea iteratoare a hărții, ceea ce face ca adăugarea, eliminarea și găsirea intrărilor într-un HashMap să fie relativ mai rapid decât să facă același lucru cu un LinkedHashMap. Cu toate acestea, diferența cheie dintre cele două este ordinea: elementele unui HashMap nu sunt în ordine, în timp ce elementele unui LinkedHashMap se află în ordinea inserării cheilor, implicit în ordinea în care sunt inserate cheile în hartă. LinkedHashMap poate, de asemenea, să-și mențină elementele în ordinea accesării, adică ordinea în care sunt accesate intrările. Ca și în cazul LinkedHashMap, trebuie păstrată o listă dublu legată, care are o performanță mai mică decât HashMap.